Skip to content

fix(verification-gate): use sw-verification type + heuristic bench-only skips#39

Merged
avrabe merged 4 commits into
mainfrom
falcon/fix-verification-gate-filter
May 25, 2026
Merged

fix(verification-gate): use sw-verification type + heuristic bench-only skips#39
avrabe merged 4 commits into
mainfrom
falcon/fix-verification-gate-filter

Conversation

@avrabe
Copy link
Copy Markdown
Contributor

@avrabe avrabe commented May 25, 2026

The Verification Gate (rivet-driven) workflow has been quietly reporting 0/0 passed on every PR since it landed. Bug + fix below.

The bug

scripts/run-falcon-verification.py line 33 hardcoded:

"--type", "unit-verification",

Every falcon FV-*.yaml artifact uses type: sw-verification (32 of them). The filter matched 0 artifacts, the gate ran 0 commands, and posted the now-familiar:

0 artifact(s) matched: ✅ Rivet verification gate — falcon · 0/0 passed

The gate has been safety theater for many releases.

The fix

  1. Change --type default to sw-verification — now matches all 32 FV-FALCON-*.
  2. Add --type CLI flag so other gates can target other artifact types.
  3. Heuristic bench-only detection — naive type-fix would try running cargo kani, cargo +nightly miri, gz-sim, PX4-SITL, $WITNESS, /Users/r/... developer paths, etc. — all of which need infra the standard ubuntu-latest runner doesn't have. Rivet strips shell # bench-only comments at the YAML→JSON boundary (confirmed), so the marker can't ride along in the field. New BENCH_PATTERNS regex list matches command SHAPE conservatively (better to skip a runnable command than fail CI on a missing tool).
  4. Markdown summary distinguishes Skipped (bench-only) from Skipped (no steps) and lists the bench-only artifacts so an assessor sees what would run on a real bench.

Local verification

$ python3 scripts/run-falcon-verification.py --markdown
…
## ✅ Rivet verification gate — falcon
**28/28 passed**
| count |   |
|-----|---|
| Passed | 28 |
| Failed | 0 |
| Skipped (bench-only — needs hardware / sim) | 4 |
| Skipped (no steps) | 0 |

### Bench-only artifacts (not run by CI)
- `FV-FALCON-ARCH-001` (spar AADL analysis)
- `FV-FALCON-ARCH-002` (spar codegen recheck)
- `FV-FALCON-GEO-003` (miri UB-check)
- `FV-FALCON-SIM-001` (PX4-SITL bench recipe)

What this PR will reveal in CI

The gate will start actually running the 28 in-scope FV artifacts on every PR. If anything regresses (e.g. a previously-green cargo test starts failing), the gate will flag it — that's the design. If a step turns out to need infra I missed in the BENCH_PATTERNS list, this PR is where we'll see the false-failure and add the pattern.

Honest note

Also added redundant # bench-only shell-comment annotations to several FV files during diagnosis (before discovering rivet strips them). Kept as human-readable documentation; the script ignores them.

🤖 Generated with Claude Code

avrabe and others added 2 commits May 25, 2026 07:19
…ly skips

The Verification Gate (rivet-driven) workflow has been quietly
reporting "0/0 passed" on every PR since it landed. Bug: line 33 of
scripts/run-falcon-verification.py hardcoded
`rivet list --type unit-verification`, but every falcon FV-* artifact
uses `type: sw-verification`. The filter matched 0 artifacts, the
gate ran 0 commands, and reported "0/0 passed" — silent gate.

Fix:
- Change the script default to `--type sw-verification` (now matches
  32 FV-FALCON-* artifacts).
- Add `--type` flag so callers can override (sys-verification, etc).
- Update doc comments and README references accordingly.

Bench-only detection (the second half of the fix):
- The naive type-fix would start running ~30 artifacts × N steps in
  CI, including `cargo kani`, `cargo +nightly miri`, gz-sim runs,
  PX4-SITL runs, $WITNESS template paths, /Users/r/* developer-
  machine commands — all of which need infra the standard
  ubuntu-latest runner doesn't provide.
- Rivet strips shell `# bench-only` comments at the YAML→JSON
  boundary (confirmed by inspecting `rivet get FV-* --format json`),
  so the marker can't ride along in the artifact field.
- New heuristic: `BENCH_PATTERNS` matches command SHAPE (cargo kani,
  miri, --backend=hackrf/mavlink/gazebo, --preset=px4-sitl,
  $WITNESS, gz sim, make px4_sitl, bazel test/build/run, spar,
  /Users/.../, /tmp/falcon-spar-wit, gh attestation verify).
  Conservative — better to skip a runnable command than to fail CI
  on a missing tool.
- Markdown summary distinguishes "Skipped (bench-only)" from
  "Skipped (no steps)" and lists the bench-only artifacts so an
  assessor sees what would run on a real bench.

Verification (`python3 scripts/run-falcon-verification.py --markdown`):
  Before: 0/0 passed.
  After:  28/28 passed, 4 bench-only skipped.

The bench-only artifacts (only-runnable on a real bench):
- FV-FALCON-ARCH-001 (spar AADL analysis on the falcon model)
- FV-FALCON-ARCH-002 (spar codegen --format wit recheck)
- FV-FALCON-GEO-003 (miri UB-check on relay-lc)
- FV-FALCON-SIM-001 (PX4-SITL loop bench recipe)

Also: redundant `# bench-only` shell-comment annotations added to
several FV-FALCON-* artifacts during diagnosis. Kept as human-
readable documentation; the script ignores them (rivet strips
them).

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
The cargo-llvm-cov local output file leaked into the previous
commit. Remove + add to .gitignore.
@temper-pulseengine
Copy link
Copy Markdown
Contributor

Automated review for PR #39

pulseengine/relay:falcon/fix-verification-gate-filter → pulseengine/relay:main

Verdict: 💬 Comment

Summary: The proposed changes to the verification gate for the Falcon project are well-structured and address the concerns raised in the initial review. The use of a rivet artifact type that matches every FV-FALCON-*.yaml ensures comprehensive coverage of all verification artifacts. The addition of comments and explanations clarifies the purpose and functionality of each change, making it easier to review.

Findings: 0 mechanical (rivet) · 4 from local AI model.

Findings (4):

  1. artifacts/verification/FV-FALCON-NID-001.yaml:59

    - run: cargo kani -p relay-nid
    

    The kani command is intended to be used for testing and not verification.

  2. artifacts/verification/FV-FALCON-GEO-002.yaml:47

    - run: cargo kani -p relay-lc
    

    The kani command is intended to be used for testing and not verification.

  3. artifacts/verification/FV-FALCON-COV-004.yaml:85

    - run: $WITNESS run /path/to/instrumented.wasm --output run.json --harness target/release/witness-wasi-harness
    

    $WITNESS is intended to be used for testing and not verification.

  4. artifacts/verification/FV-FALCON-COV-005.yaml:83

    - run: WITNESS_HARNESS_INVOKES="run_inside" $WITNESS run /tmp/instr.wasm --harness target/debug/witness-wasi-harness -o /tmp/run.json
    

    $WITNESS is intended to be used for testing and not verification.


Generated by a local AI model and post-validated against a strict JSON contract. Each finding includes the verbatim line being criticised — verify by reading the file at the cited location.

Reviewed at 55689e1

@github-actions
Copy link
Copy Markdown

ghost commented May 25, 2026

running 55 tests
test command_long::tests::crc_extra_is_152 ... ok
test command_long::tests::decode_rejects_long_payload ... ok
test command_long::tests::decode_rejects_short_payload ... ok
test command_long::tests::field_offsets_match_spec ... ok
test command_long::tests::msg_id_is_76 ... ok
test command_long::tests::payload_length_is_33 ... ok
test command_long::tests::round_trip_rtl ... ok
test command_long::tests::round_trip_with_params ... ok
test command_long::tests::rtl_builder_has_zero_params ... ok
test command_long::tests::rtl_command_id_is_20 ... ok
test crc::tests::accumulate_slice_equals_individual ... ok
test crc::tests::empty_input_keeps_seed ... ok
test crc::tests::mavlink_reference_vector_123456789 ... ok
test crc::tests::order_matters ... ok
test crc::tests::single_byte_zero ... ok
test frame::tests::encode_rejects_payload_length_mismatch ... ok
test frame::tests::encode_rejects_too_small_output ... ok
test frame::tests::frame_msg_id_three_bytes_little_endian ... ok
test frame::tests::frame_payload_length_byte_matches ... ok
test frame::tests::frame_starts_with_magic_v2 ... ok
test frame::tests::peek_message_id_finds_heartbeat ... ok
test frame::tests::peek_rejects_v1_magic ... ok
test frame::tests::rejects_bad_crc ... ok
test frame::tests::rejects_truncated_header ... ok
test frame::tests::rejects_truncated_payload ... ok
test frame::tests::rejects_v1_magic ... ok
test frame::tests::rejects_wrong_crc_extra ... ok
test frame::tests::round_trip_heartbeat_through_frame ... ok
test global_position_int::tests::crc_extra_is_104 ... ok
test global_position_int::tests::decode_rejects_empty ... ok
test global_position_int::tests::decode_rejects_long_payload ... ok
test global_position_int::tests::decode_rejects_short_payload ... ok
test global_position_int::tests::field_offsets_match_spec ... ok
test global_position_int::tests::msg_id_is_33 ... ok
test global_position_int::tests::payload_length_is_28 ... ok
test command_long::tests::round_trip_arbitrary ... ok
test global_position_int::tests::round_trip_extremes ... ok
test global_position_int::tests::round_trip_sample ... ok
test global_position_int::tests::round_trip_zero ... ok
test heartbeat::tests::crc_extra_is_fifty ... ok
test heartbeat::tests::custom_mode_little_endian ... ok
test heartbeat::tests::decode_empty_payload ... ok
test heartbeat::tests::decode_rejects_long_payload ... ok
test heartbeat::tests::decode_rejects_short_payload ... ok
test heartbeat::tests::field_offsets_match_spec ... ok
test heartbeat::tests::mav_mode_flag_or_and_contains ... ok
test frame::tests::encode_parse_round_trip_arbitrary_seq ... ok
test heartbeat::tests::payload_length_constant ... ok
test heartbeat::tests::round_trip_falcon_default ... ok
test heartbeat::tests::round_trip_gcs_default ... ok
test heartbeat::tests::round_trip_max_values ... ok
test heartbeat::tests::round_trip_zero ... ok
test global_position_int::tests::round_trip_arbitrary ... ok
test heartbeat::tests::round_trip_arbitrary ... ok
test frame::tests::parser_never_panics ... ok

test result: ok. 55 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.03s

running 0 tests

test result: ok. 0 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s

running 10 tests
test hackrf::tests::gps_sdr_sim_argv_shape_is_stable ... ok
test mavlink::tests::altitude_translates_to_down ... ok
test mavlink::tests::build_frame_carries_correct_message_id ... ok
test hackrf::tests::hackrf_argv_shape_is_stable ... ok
test mavlink::tests::home_projects_to_origin ... ok
test mavlink::tests::mavlink_bench_no_violation_no_latch ... ok
test mavlink::tests::one_hundred_metres_north_projects_to_10000_cm_n ... ok
test mavlink::tests::mavlink_bench_trips_and_dispatches_on_spoof ... ok
test stub::tests::stub_bench_trips_and_dispatches ... ok
test stub::tests::stub_bench_no_violation_no_latch ... ok

test result: ok. 10 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s

Kani-TQ.md
README.md
Verus-TQ.md
miri-TQ.md
spar-TQ.md
witness-TQ.md
64 docs/dossier/tool-qualification/Kani-TQ.md
64 docs/dossier/tool-qualification/README.md
75 docs/dossier/tool-qualification/Verus-TQ.md
82 docs/dossier/tool-qualification/miri-TQ.md
85 docs/dossier/tool-qualification/spar-TQ.md
78 docs/dossier/tool-qualification/witness-TQ.md
448 total

running 6 tests
test physics::tests::gazebo_stub_compiles_and_returns_zeros ... ok
test physics::tests::mock_physics_at_rest_stays_quiet ... ok
test physics::tests::mock_physics_hover_with_full_thrust_climbs ... ok
test physics::tests::mock_physics_measure_returns_sensible_imu ... ok
test tests::gazebo_stub_does_not_panic ... ok
test tests::mock_backend_climbs_under_full_thrust ... ok

test result: ok. 6 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s

running 16 tests
test tests::cross_of_parallel_is_zero ... ok
test tests::ekf_p01_tick_preserves_unit_quaternion ... ok
test tests::ekf_p02_extreme_accel_does_not_produce_nan ... ok
test tests::ekf_p02_zero_accel_does_not_produce_nan ... ok
test tests::ekf_p03_innovation_monotone_with_tilt_disagreement ... ok
test tests::ekf_p04_static_rest_converges_to_gravity_aligned ... ok
test tests::ekf_p05_pure_yaw_gyro_does_not_destabilise_attitude ... ok
test tests::fresh_estimator_is_at_identity ... ok
test tests::normalise_nan_returns_none ... ok
test tests::normalise_zero_returns_none ... ok
test tests::quat_mul_identity_left ... ok
test tests::quat_mul_identity_right ... ok
test tests::rotate_inverse_identity_passes_through ... ok
test tests::ekf_p01_property ... ok
test tests::bias_estimate_bounded ... ok
test tests::ekf_p02_property_sequence ... ok

test result: ok. 16 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.05s

running 0 tests

test result: ok. 0 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s

running 16 tests
test tests::cross_of_parallel_is_zero ... ok
test tests::ekf_p01_tick_preserves_unit_quaternion ... ok
test tests::ekf_p02_extreme_accel_does_not_produce_nan ... ok
test tests::ekf_p02_zero_accel_does_not_produce_nan ... ok
test tests::ekf_p03_innovation_monotone_with_tilt_disagreement ... ok
test tests::ekf_p04_static_rest_converges_to_gravity_aligned ... ok
test tests::ekf_p05_pure_yaw_gyro_does_not_destabilise_attitude ... ok
test tests::fresh_estimator_is_at_identity ... ok
test tests::normalise_nan_returns_none ... ok
test tests::normalise_zero_returns_none ... ok
test tests::ekf_p01_property ... ok
test tests::quat_mul_identity_left ... ok
test tests::quat_mul_identity_right ... ok
test tests::rotate_inverse_identity_passes_through ... ok
test tests::ekf_p02_property_sequence ... ok
test tests::bias_estimate_bounded ... ok

test result: ok. 16 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.01s

running 0 tests

test result: ok. 0 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s

running 16 tests
test tests::cross_of_parallel_is_zero ... ok
test tests::ekf_p01_tick_preserves_unit_quaternion ... ok
test tests::ekf_p02_extreme_accel_does_not_produce_nan ... ok
test tests::ekf_p02_zero_accel_does_not_produce_nan ... ok
test tests::ekf_p03_innovation_monotone_with_tilt_disagreement ... ok
test tests::ekf_p04_static_rest_converges_to_gravity_aligned ... ok
test tests::ekf_p05_pure_yaw_gyro_does_not_destabilise_attitude ... ok
test tests::fresh_estimator_is_at_identity ... ok
test tests::normalise_nan_returns_none ... ok
test tests::normalise_zero_returns_none ... ok
test tests::quat_mul_identity_left ... ok
test tests::quat_mul_identity_right ... ok
test tests::rotate_inverse_identity_passes_through ... ok
test tests::bias_estimate_bounded ... ok
test tests::ekf_p01_property ... ok
test tests::ekf_p02_property_sequence ... ok

test result: ok. 16 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.77s

running 0 tests

test result: ok. 0 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s

running 5 tests
test tests::phases_are_consistent_with_trajectory_duration ... ok
test tests::quat_error_is_zero_for_identical_quaternions ... ok
test tests::rotate_ned_to_body_identity_passes_through ... ok
test tests::deterministic_bench_passes ... ok
test tests::noisy_bench_passes_loose ... ok

test result: ok. 5 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s

--- noise=0 (deterministic) ---
samples 5000
RMS error (full) 3.306°
RMS error (steady) 3.312° (last 2.5 s)
peak error 19.804°
final error 3.023°
convergence time 0.68s (first sustained <5°)
estimator wall time 599 µs
NaN/∞ seen false
falcon-ekf-bench: PASS

running 1 test
test tests::deterministic_untethered_mission_visits_all_waypoints ... ok

test result: ok. 1 passed; 0 failed; 0 ignored; 0 measured; 16 filtered out; finished in 0.05s

running 9 tests
test engine::tests::test_action_types ... ok
test engine::tests::test_alert_count_bounded ... ok
test engine::tests::test_counter_incrementing_no_alert ... ok
test engine::tests::test_counter_reset_on_activity ... ok
test engine::tests::test_disabled_app_ignored ... ok
test engine::tests::test_empty_table ... ok
test engine::tests::test_multiple_apps ... ok
test engine::tests::test_stalled_app_alert_after_max_miss ... ok
test engine::tests::test_table_full ... ok

test result: ok. 9 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s

running 0 tests

test result: ok. 0 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s

running 17 tests
test tests::deterministic_disturbance_recovers ... ok
test tests::deterministic_attitude_cascade_passes ... ok
test tests::deterministic_hover_settles ... ok
test tests::deterministic_step_response_passes ... ok
test tests::deterministic_mission_passes ... ok
test tests::ekf_watchdog_catches_intermittent_fault ... ok
test tests::ekf_watchdog_debounces_transient_spikes ... ok
test tests::ekf_watchdog_ignores_healthy_innovation ... ok
test tests::deterministic_fault_triggers_rtl ... ok
test tests::noisy_attitude_cascade_still_passes ... ok
test tests::deterministic_geofence_catches_spoof_and_triggers_rtl ... ok
test tests::noisy_step_response_still_passes ... ok
test tests::plant_step_full_preserves_unit_quaternion_and_finite_state ... ok
test tests::plant_step_preserves_unit_quaternion ... ok
test tests::noisy_mission_still_reaches_waypoint ... ok
test tests::noisy_fault_still_triggers_rtl ... ok
test tests::deterministic_untethered_mission_visits_all_waypoints ... ok

test result: ok. 17 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.07s

running 10 tests
test hackrf::tests::gps_sdr_sim_argv_shape_is_stable ... ok
test mavlink::tests::altitude_translates_to_down ... ok
test hackrf::tests::hackrf_argv_shape_is_stable ... ok
test mavlink::tests::build_frame_carries_correct_message_id ... ok
test mavlink::tests::home_projects_to_origin ... ok
test mavlink::tests::mavlink_bench_no_violation_no_latch ... ok
test mavlink::tests::one_hundred_metres_north_projects_to_10000_cm_n ... ok
test mavlink::tests::mavlink_bench_trips_and_dispatches_on_spoof ... ok
test stub::tests::stub_bench_no_violation_no_latch ... ok
test stub::tests::stub_bench_trips_and_dispatches ... ok

test result: ok. 10 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s

falcon-hitl-rfspoof: backend=stub duration=5s
fence: ±100 m × ±100 m × ±100 m (NED, centred on home)
verdict = HitlVerdict {
backend: "stub",
duration_s: 5.0,
steps: 500,
latched: true,
latched_at_s: Some(
1.9999985,
),
rtl_dispatched: true,
rtl_frame_sent: true,
spoof_first_seen_at_s: Some(
1.9999985,
),
failure: None,
}
PASS

running 9 tests
test tests::args_default_ports_for_gcs_mode ... ok
test tests::args_default_ports_for_vehicle_mode ... ok
test tests::args_rejects_missing_mode ... ok
test tests::args_rejects_unknown_mode ... ok
test tests::handle_inbound_propagates_bad_crc ... ok
test tests::handle_inbound_rejects_unsupported_message ... ok
test tests::handle_inbound_truncated ... ok
test tests::current_timestamp_is_monotone_within_a_run ... ok
test tests::vehicle_and_gcs_exchange_heartbeats_over_udp ... ok

test result: ok. 9 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.06s

[falcon-hello-demo] building release binary...
[falcon-hello-demo] launching gcs on 127.0.0.1:14700
[falcon-hello-demo] launching vehicle (4 Hz × 4s)
[falcon-hello-demo] vehicle sent 13 heartbeat(s)
[falcon-hello-demo] gcs received 13 heartbeat(s)
[falcon-hello-demo] PASS

running 10 tests
test tests::high_thrust_with_torque_saturates_gracefully ... ok
test tests::mix_p01_zero_command_gives_thrust_only ... ok
test tests::mix_p02_outputs_in_unit_interval ... ok
test tests::mix_p03_pure_pitch_drives_front_and_back_motors_opposite ... ok
test tests::mix_p03_pure_roll_drives_diagonal_motor_pairs_opposite ... ok
test tests::mix_p03_pure_yaw_drives_cw_and_ccw_pairs_opposite ... ok
test tests::nan_input_does_not_propagate ... ok
test tests::negative_thrust_clipped_to_zero ... ok
test tests::mix_p03_property_single_axis ... ok
test tests::mix_p02_property ... ok

test result: ok. 10 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.01s

running 0 tests

test result: ok. 0 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s

running 13 tests
test tests::at_zero_error_output_is_zero ... ok
test tests::fresh_pid_has_zero_state ... ok
test tests::negative_error_drives_negative_torque ... ok
test tests::out_of_range_dt_clamped_safely ... ok
test tests::positive_error_drives_positive_torque ... ok
test tests::rate_p02_infinite_setpoint_does_not_propagate ... ok
test tests::rate_p02_nan_input_does_not_propagate ... ok
test tests::output_clamped_to_torque_max ... ok
test tests::rate_p03_step_response_drives_error_to_zero ... ok
test tests::reset_clears_state ... ok
test tests::rate_p02_property ... ok
test tests::rate_p01_anti_windup_holds_integral_at_bound ... ok
test tests::rate_p01_property ... ok

test result: ok. 13 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.05s

running 0 tests

test result: ok. 0 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s

running 17 tests
test tests::deterministic_disturbance_recovers ... ok
test tests::deterministic_attitude_cascade_passes ... ok
test tests::deterministic_hover_settles ... ok
test tests::deterministic_step_response_passes ... ok
test tests::deterministic_mission_passes ... ok
test tests::ekf_watchdog_catches_intermittent_fault ... ok
test tests::ekf_watchdog_debounces_transient_spikes ... ok
test tests::ekf_watchdog_ignores_healthy_innovation ... ok
test tests::deterministic_fault_triggers_rtl ... ok
test tests::noisy_attitude_cascade_still_passes ... ok
test tests::deterministic_geofence_catches_spoof_and_triggers_rtl ... ok
test tests::noisy_step_response_still_passes ... ok
test tests::plant_step_full_preserves_unit_quaternion_and_finite_state ... ok
test tests::plant_step_preserves_unit_quaternion ... ok
test tests::noisy_mission_still_reaches_waypoint ... ok
test tests::noisy_fault_still_triggers_rtl ... ok
test tests::deterministic_untethered_mission_visits_all_waypoints ... ok

test result: ok. 17 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.07s

running 55 tests
test command_long::tests::crc_extra_is_152 ... ok
test command_long::tests::decode_rejects_long_payload ... ok
test command_long::tests::decode_rejects_short_payload ... ok
test command_long::tests::field_offsets_match_spec ... ok
test command_long::tests::msg_id_is_76 ... ok
test command_long::tests::payload_length_is_33 ... ok
test command_long::tests::round_trip_rtl ... ok
test command_long::tests::round_trip_with_params ... ok
test command_long::tests::rtl_builder_has_zero_params ... ok
test command_long::tests::rtl_command_id_is_20 ... ok
test crc::tests::accumulate_slice_equals_individual ... ok
test crc::tests::empty_input_keeps_seed ... ok
test crc::tests::mavlink_reference_vector_123456789 ... ok
test crc::tests::order_matters ... ok
test crc::tests::single_byte_zero ... ok
test frame::tests::encode_rejects_payload_length_mismatch ... ok
test frame::tests::encode_rejects_too_small_output ... ok
test frame::tests::frame_msg_id_three_bytes_little_endian ... ok
test frame::tests::frame_payload_length_byte_matches ... ok
test frame::tests::frame_starts_with_magic_v2 ... ok
test frame::tests::peek_message_id_finds_heartbeat ... ok
test frame::tests::peek_rejects_v1_magic ... ok
test frame::tests::rejects_bad_crc ... ok
test frame::tests::rejects_truncated_header ... ok
test frame::tests::rejects_truncated_payload ... ok
test frame::tests::rejects_v1_magic ... ok
test frame::tests::rejects_wrong_crc_extra ... ok
test frame::tests::round_trip_heartbeat_through_frame ... ok
test global_position_int::tests::crc_extra_is_104 ... ok
test global_position_int::tests::decode_rejects_empty ... ok
test global_position_int::tests::decode_rejects_long_payload ... ok
test global_position_int::tests::decode_rejects_short_payload ... ok
test global_position_int::tests::field_offsets_match_spec ... ok
test global_position_int::tests::msg_id_is_33 ... ok
test global_position_int::tests::payload_length_is_28 ... ok
test command_long::tests::round_trip_arbitrary ... ok
test global_position_int::tests::round_trip_extremes ... ok
test frame::tests::encode_parse_round_trip_arbitrary_seq ... ok
test global_position_int::tests::round_trip_sample ... ok
test global_position_int::tests::round_trip_zero ... ok
test heartbeat::tests::crc_extra_is_fifty ... ok
test heartbeat::tests::custom_mode_little_endian ... ok
test heartbeat::tests::decode_empty_payload ... ok
test heartbeat::tests::decode_rejects_long_payload ... ok
test heartbeat::tests::decode_rejects_short_payload ... ok
test heartbeat::tests::field_offsets_match_spec ... ok
test heartbeat::tests::mav_mode_flag_or_and_contains ... ok
test heartbeat::tests::payload_length_constant ... ok
test heartbeat::tests::round_trip_falcon_default ... ok
test heartbeat::tests::round_trip_gcs_default ... ok
test heartbeat::tests::round_trip_max_values ... ok
test heartbeat::tests::round_trip_zero ... ok
test global_position_int::tests::round_trip_arbitrary ... ok
test heartbeat::tests::round_trip_arbitrary ... ok
test frame::tests::parser_never_panics ... ok

test result: ok. 55 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.03s

running 0 tests

test result: ok. 0 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s

running 20 tests
test bitpack::tests::bitpack_basic_id_packs_id_and_ua_type_in_same_byte ... ok
test bitpack::tests::bitpack_decoder_rejects_unknown_protocol_version ... ok
test bitpack::tests::bitpack_basic_id_round_trip ... ok
test bitpack::tests::bitpack_location_idempotent_after_canonicalize ... ok
test bitpack::tests::bitpack_location_rejects_oversize_track_byte ... ok
test bitpack::tests::bitpack_location_rejects_wrong_message_type ... ok
test bitpack::tests::bitpack_location_round_trip_on_canonical ... ok
test tests::basic_id_header_byte_is_well_formed ... ok
test tests::basic_id_round_trip ... ok
test tests::decoder_rejects_unknown_protocol_version ... ok
test tests::location_rejects_out_of_range_timestamp ... ok
test tests::location_rejects_out_of_range_track ... ok
test tests::location_rejects_wrong_message_type ... ok
test tests::location_round_trip ... ok
test bitpack::tests::proptest_bitpack_location_round_trip_on_canonical ... ok
test bitpack::tests::proptest_bitpack_basic_id_round_trip ... ok
test tests::proptest_basic_id_round_trip ... ok
test bitpack::tests::proptest_bitpack_decoder_never_panics ... ok
test tests::proptest_location_round_trip_in_range ... ok
test tests::proptest_decoder_never_panics ... ok

test result: ok. 20 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.02s

running 0 tests

test result: ok. 0 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s

running 10 tests
test tests::high_thrust_with_torque_saturates_gracefully ... ok
test tests::mix_p01_zero_command_gives_thrust_only ... ok
test tests::mix_p02_outputs_in_unit_interval ... ok
test tests::mix_p03_pure_pitch_drives_front_and_back_motors_opposite ... ok
test tests::mix_p03_pure_roll_drives_diagonal_motor_pairs_opposite ... ok
test tests::mix_p03_pure_yaw_drives_cw_and_ccw_pairs_opposite ... ok
test tests::nan_input_does_not_propagate ... ok
test tests::negative_thrust_clipped_to_zero ... ok
test tests::mix_p03_property_single_axis ... ok
test tests::mix_p02_property ... ok

test result: ok. 10 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.01s

running 0 tests

test result: ok. 0 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s

running 10 tests
test tests::high_thrust_with_torque_saturates_gracefully ... ok
test tests::mix_p02_outputs_in_unit_interval ... ok
test tests::mix_p01_zero_command_gives_thrust_only ... ok
test tests::mix_p03_pure_pitch_drives_front_and_back_motors_opposite ... ok
test tests::mix_p03_pure_roll_drives_diagonal_motor_pairs_opposite ... ok
test tests::mix_p03_pure_yaw_drives_cw_and_ccw_pairs_opposite ... ok
test tests::nan_input_does_not_propagate ... ok
test tests::negative_thrust_clipped_to_zero ... ok
test tests::mix_p03_property_single_axis ... ok
test tests::mix_p02_property ... ok

test result: ok. 10 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s

running 0 tests

test result: ok. 0 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s

running 10 tests
test tests::high_thrust_with_torque_saturates_gracefully ... ok
test tests::mix_p01_zero_command_gives_thrust_only ... ok
test tests::mix_p03_pure_pitch_drives_front_and_back_motors_opposite ... ok
test tests::mix_p02_outputs_in_unit_interval ... ok
test tests::mix_p03_pure_roll_drives_diagonal_motor_pairs_opposite ... ok
test tests::mix_p03_pure_yaw_drives_cw_and_ccw_pairs_opposite ... ok
test tests::nan_input_does_not_propagate ... ok
test tests::negative_thrust_clipped_to_zero ... ok
test tests::mix_p03_property_single_axis ... ok
test tests::mix_p02_property ... ok

test result: ok. 10 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.10s

running 0 tests

test result: ok. 0 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s

Filename Regions Missed Regions Cover Functions Missed Functions Executed Lines Missed Lines Cover Branches Missed Branches Cover

coverage_subjects/geofence_subject_rs/src/lib.rs 48 48 0.00% 5 5 0.00% 23 23 0.00% 0 0 -
crates/relay-att/plain/src/lib.rs 380 31 91.84% 27 6 77.78% 207 29 85.99% 0 0 -
crates/relay-ccsds/plain/src/engine.rs 227 0 100.00% 15 0 100.00% 172 0 100.00% 0 0 -
crates/relay-ccsds/plain/src/sensor_wire.rs 209 4 98.09% 16 0 100.00% 174 0 100.00% 0 0 -
crates/relay-cfdp/plain/src/engine.rs 371 27 92.72% 20 0 100.00% 240 25 89.58% 0 0 -
crates/relay-ci/plain/src/engine.rs 135 3 97.78% 14 1 92.86% 125 3 97.60% 0 0 -
crates/relay-cs/plain/src/engine.rs 237 1 99.58% 18 0 100.00% 162 1 99.38% 0 0 -
crates/relay-ds/plain/src/engine.rs 157 0 100.00% 14 0 100.00% 156 0 100.00% 0 0 -
crates/relay-ekf-stub/plain/src/lib.rs 105 0 100.00% 11 0 100.00% 63 0 100.00% 0 0 -
crates/relay-ekf/plain/src/lib.rs 458 36 92.14% 38 7 81.58% 264 37 85.98% 0 0 -
crates/relay-fm/plain/src/engine.rs 231 6 97.40% 16 0 100.00% 141 5 96.45% 0 0 -
crates/relay-hk/plain/src/engine.rs 239 4 98.33% 15 1 93.33% 159 1 99.37% 0 0 -
crates/relay-hs/plain/src/engine.rs 274 7 97.45% 20 1 95.00% 194 3 98.45% 0 0 -
crates/relay-lc-diff/src/lib.rs 50 1 98.00% 4 0 100.00% 44 1 97.73% 0 0 -
crates/relay-lc/plain/src/engine.rs 270 4 98.52% 23 1 95.65% 106 1 99.06% 0 0 -
crates/relay-mavlink/plain/src/command_long.rs 145 0 100.00% 13 0 100.00% 96 0 100.00% 0 0 -
crates/relay-mavlink/plain/src/crc.rs 85 3 96.47% 10 1 90.00% 53 3 94.34% 0 0 -
crates/relay-mavlink/plain/src/frame.rs 300 3 99.00% 18 1 94.44% 212 3 98.58% 0 0 -
crates/relay-mavlink/plain/src/global_position_int.rs 153 0 100.00% 13 0 100.00% 100 0 100.00% 0 0 -
crates/relay-mavlink/plain/src/heartbeat.rs 161 3 98.14% 19 1 94.74% 144 3 97.92% 0 0 -
crates/relay-md/plain/src/engine.rs 149 0 100.00% 12 0 100.00% 142 0 100.00% 0 0 -
crates/relay-mix-quad/plain/src/lib.rs 201 2 99.00% 14 0 100.00% 105 1 99.05% 0 0 -
crates/relay-mm/plain/src/engine.rs 124 4 96.77% 12 1 91.67% 125 9 92.80% 0 0 -
crates/relay-nid/plain/src/bitpack.rs 281 6 97.86% 14 0 100.00% 164 1 99.39% 0 0 -
crates/relay-nid/plain/src/lib.rs 275 11 96.00% 17 0 100.00% 162 1 99.38% 0 0 -
crates/relay-pos/plain/src/lib.rs 472 26 94.49% 30 5 83.33% 318 29 90.88% 0 0 -
crates/relay-primitives/plain/src/ccsds.rs 174 5 97.13% 12 0 100.00% 116 3 97.41% 0 0 -
crates/relay-primitives/plain/src/compare.rs 35 0 100.00% 4 0 100.00% 35 0 100.00% 0 0 -
crates/relay-primitives/plain/src/crc32.rs 34 0 100.00% 4 0 100.00% 20 0 100.00% 0 0 -
crates/relay-primitives/plain/src/filter.rs 24 0 100.00% 4 0 100.00% 14 0 100.00% 0 0 -
crates/relay-primitives/plain/src/merge.rs 73 1 98.63% 8 0 100.00% 53 1 98.11% 0 0 -
crates/relay-primitives/plain/src/persistence.rs 47 0 100.00% 8 0 100.00% 38 0 100.00% 0 0 -
crates/relay-primitives/plain/src/rate_divide.rs 32 0 100.00% 4 0 100.00% 22 0 100.00% 0 0 -
crates/relay-primitives/plain/src/time_gate.rs 34 0 100.00% 6 0 100.00% 22 0 100.00% 0 0 -
crates/relay-rate/plain/src/lib.rs 358 30 91.62% 27 5 81.48% 211 25 88.15% 0 0 -
crates/relay-sc/plain/src/engine.rs 252 6 97.62% 21 1 95.24% 215 1 99.53% 0 0 -
crates/relay-sca/plain/src/engine.rs 161 3 98.14% 14 1 92.86% 176 3 98.30% 0 0 -
crates/relay-sch/plain/src/engine.rs 140 3 97.86% 14 1 92.86% 47 1 97.87% 0 0 -
crates/relay-tbl/plain/src/engine.rs 236 5 97.88% 15 0 100.00% 152 5 96.71% 0 0 -
crates/relay-to/plain/src/engine.rs 150 0 100.00% 13 0 100.00% 97 0 100.00% 0 0 -
host/relay-sb/src/core.rs 367 4 98.91% 28 0 100.00% 221 3 98.64% 0 0 -
host/witness-wasi-harness/src/main.rs 356 356 0.00% 14 14 0.00% 161 161 0.00% 0 0 -

TOTAL 8210 643 92.17% 624 53 91.51% 5451 382 92.99% 0 0 -

running 5 tests
test tests::phases_are_consistent_with_trajectory_duration ... ok
test tests::quat_error_is_zero_for_identical_quaternions ... ok
test tests::rotate_ned_to_body_identity_passes_through ... ok
test tests::deterministic_bench_passes ... ok
test tests::noisy_bench_passes_loose ... ok

test result: ok. 5 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.01s

running 9 tests
test tests::args_default_ports_for_gcs_mode ... ok
test tests::args_default_ports_for_vehicle_mode ... ok
test tests::args_rejects_missing_mode ... ok
test tests::args_rejects_unknown_mode ... ok
test tests::handle_inbound_propagates_bad_crc ... ok
test tests::handle_inbound_rejects_unsupported_message ... ok
test tests::handle_inbound_truncated ... ok
test tests::current_timestamp_is_monotone_within_a_run ... ok
test tests::vehicle_and_gcs_exchange_heartbeats_over_udp ... ok

test result: ok. 9 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.06s

running 10 tests
test hackrf::tests::gps_sdr_sim_argv_shape_is_stable ... ok
test hackrf::tests::hackrf_argv_shape_is_stable ... ok
test mavlink::tests::altitude_translates_to_down ... ok
test mavlink::tests::build_frame_carries_correct_message_id ... ok
test mavlink::tests::home_projects_to_origin ... ok
test mavlink::tests::mavlink_bench_no_violation_no_latch ... ok
test mavlink::tests::one_hundred_metres_north_projects_to_10000_cm_n ... ok
test mavlink::tests::mavlink_bench_trips_and_dispatches_on_spoof ... ok
test stub::tests::stub_bench_trips_and_dispatches ... ok
test stub::tests::stub_bench_no_violation_no_latch ... ok

test result: ok. 10 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s

running 6 tests
test physics::tests::gazebo_stub_compiles_and_returns_zeros ... ok
test physics::tests::mock_physics_hover_with_full_thrust_climbs ... ok
test physics::tests::mock_physics_at_rest_stays_quiet ... ok
test physics::tests::mock_physics_measure_returns_sensible_imu ... ok
test tests::gazebo_stub_does_not_panic ... ok
test tests::mock_backend_climbs_under_full_thrust ... ok

test result: ok. 6 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s

running 17 tests
test tests::deterministic_disturbance_recovers ... ok
test tests::deterministic_attitude_cascade_passes ... ok
test tests::deterministic_hover_settles ... ok
test tests::deterministic_step_response_passes ... ok
test tests::deterministic_mission_passes ... ok
test tests::ekf_watchdog_catches_intermittent_fault ... ok
test tests::ekf_watchdog_debounces_transient_spikes ... ok
test tests::ekf_watchdog_ignores_healthy_innovation ... ok
test tests::deterministic_geofence_catches_spoof_and_triggers_rtl ... ok
test tests::deterministic_fault_triggers_rtl ... ok
test tests::noisy_attitude_cascade_still_passes ... ok
test tests::noisy_step_response_still_passes ... ok
test tests::plant_step_full_preserves_unit_quaternion_and_finite_state ... ok
test tests::plant_step_preserves_unit_quaternion ... ok
test tests::noisy_mission_still_reaches_waypoint ... ok
test tests::noisy_fault_still_triggers_rtl ... ok
test tests::deterministic_untethered_mission_visits_all_waypoints ... ok

test result: ok. 17 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.11s

running 0 tests

test result: ok. 0 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s

running 10 tests
test tests::att_p01_quaternion_error_is_unit_for_unit_inputs ... ok
test tests::att_p01_shortest_arc_q_err_scalar_non_negative ... ok
test tests::att_p03_small_angle_within_one_percent ... ok
test tests::degenerate_input_does_not_propagate_nan ... ok
test tests::identity_setpoint_at_identity_gives_zero_rate ... ok
test tests::negative_roll_setpoint_gives_negative_x_rate ... ok
test tests::rate_command_clamped_to_rate_max ... ok
test tests::sqrt_f32_matches_libm_within_tolerance ... ok
test tests::twenty_deg_roll_setpoint_gives_positive_x_rate ... ok
test tests::att_p01_property ... ok

test result: ok. 10 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.01s

running 22 tests
test engine::tests::test_apid_masking ... ok
test engine::tests::test_checksum_single_byte ... ok
test engine::tests::test_checksum_xor ... ok
test engine::tests::test_encode_decode_roundtrip_command ... ok
test engine::tests::test_checksum_empty ... ok
test engine::tests::test_encode_decode_roundtrip_telemetry ... ok
test engine::tests::test_too_short_buffer ... ok
test engine::tests::test_invalid_version ... ok
test engine::tests::test_validate_packet_too_short ... ok
test engine::tests::test_validate_packet_valid ... ok
test engine::tests::test_version_always_zero_in_output ... ok
test sensor_wire::tests::test_all_sensor_types ... ok
test sensor_wire::tests::test_celsius_conversion ... ok
test sensor_wire::tests::test_contact_sensor ... ok
test sensor_wire::tests::test_encode_decode_roundtrip ... ok
test sensor_wire::tests::test_invalid_version ... ok
test sensor_wire::tests::test_max_device_id ... ok
test sensor_wire::tests::test_negative_temperature ... ok
test sensor_wire::tests::test_packet_size ... ok
test sensor_wire::tests::test_too_short ... ok
test sensor_wire::tests::test_water_sensor ... ok
test sensor_wire::tests::test_watts_conversion ... ok

test result: ok. 22 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s

running 10 tests
test engine::tests::test_bounded_transactions ... ok
test engine::tests::test_cancel_on_max_retransmit ... ok
test engine::tests::test_create_transaction ... ok
test engine::tests::test_eof_transition ... ok
test engine::tests::test_get_state_invalid_id ... ok
test engine::tests::test_nak_in_wrong_state_ignored ... ok
test engine::tests::test_max_retransmit_cancels ... ok
test engine::tests::test_nak_retransmit ... ok
test engine::tests::test_state_progression ... ok
test engine::tests::test_tick_idle_sends_metadata ... ok

test result: ok. 10 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s

running 8 tests
test engine::tests::test_bad_checksum ... ok
test engine::tests::test_bad_stream_id ... ok
test engine::tests::test_compute_checksum_empty ... ok
test engine::tests::test_length_mismatch ... ok
test engine::tests::test_valid_command ... ok
test engine::tests::test_invalid_cmd_code ... ok
test engine::tests::test_compute_checksum_xor ... ok
test engine::tests::test_valid_stream_id_lookup ... ok

test result: ok. 8 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s

running 10 tests
test engine::tests::test_batch_check_bounded ... ok
test engine::tests::test_check_updates_last_checked ... ok
test engine::tests::test_crc32_empty ... ok
test engine::tests::test_check_nonexistent_region ... ok
test engine::tests::test_crc32_known_value ... ok
test engine::tests::test_empty_table ... ok
test engine::tests::test_register_region ... ok
test engine::tests::test_matching_baseline ... ok
test engine::tests::test_mismatched_baseline ... ok
test engine::tests::test_table_full ... ok

test result: ok. 10 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s

running 8 tests
test engine::tests::test_bounded_output ... ok
test engine::tests::test_disabled_filter ... ok
test engine::tests::test_empty_table ... ok
test engine::tests::test_filter_count_bounded ... ok
test engine::tests::test_matching_filter ... ok
test engine::tests::test_multiple_destinations ... ok
test engine::tests::test_no_match ... ok
test engine::tests::test_table_full ... ok

test result: ok. 8 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s

running 16 tests
test tests::cross_of_parallel_is_zero ... ok
test tests::ekf_p01_tick_preserves_unit_quaternion ... ok
test tests::ekf_p02_extreme_accel_does_not_produce_nan ... ok
test tests::ekf_p02_zero_accel_does_not_produce_nan ... ok
test tests::ekf_p03_innovation_monotone_with_tilt_disagreement ... ok
test tests::ekf_p04_static_rest_converges_to_gravity_aligned ... ok
test tests::ekf_p05_pure_yaw_gyro_does_not_destabilise_attitude ... ok
test tests::fresh_estimator_is_at_identity ... ok
test tests::normalise_nan_returns_none ... ok
test tests::normalise_zero_returns_none ... ok
test tests::quat_mul_identity_left ... ok
test tests::quat_mul_identity_right ... ok
test tests::rotate_inverse_identity_passes_through ... ok
test tests::ekf_p01_property ... ok
test tests::bias_estimate_bounded ... ok
test tests::ekf_p02_property_sequence ... ok

test result: ok. 16 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.06s

running 9 tests
test tests::deterministic_across_ticks_with_same_time ... ok
test tests::innovation_is_quiet_in_stub ... ok
test tests::fresh_stub_has_zero_time ... ok
test tests::tick_passes_time_through ... ok
test tests::tick_returns_identity_quaternion ... ok
test tests::unit_quaternion_check_rejects_clearly_non_unit ... ok
test tests::tick_returns_zero_position_and_velocity ... ok
test tests::tick_innovation_within_healthy_range ... ok
test tests::tick_always_emits_unit_quaternion ... ok

test result: ok. 9 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.01s

running 0 tests

test result: ok. 0 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s

running 0 tests

test result: ok. 0 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s

running 10 tests
test engine::tests::test_all_commands_valid ... ok
test engine::tests::test_all_validation_variants ... ok
test engine::tests::test_delete_no_dest_needed ... ok
test engine::tests::test_empty_path_rejected ... ok
test engine::tests::test_null_byte_rejected ... ok
test engine::tests::test_path_too_long ... ok
test engine::tests::test_paths_equal_symmetric ... ok
test engine::tests::test_source_eq_dest_rejected ... ok
test engine::tests::test_valid_copy_command ... ok
test engine::tests::test_valid_path ... ok

test result: ok. 10 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s

running 8 tests
test engine::tests::test_empty_table_collect_succeeds ... ok
test engine::tests::test_multiple_copies ... ok
test engine::tests::test_output_bounds_check ... ok
test engine::tests::test_sequence_increments ... ok
test engine::tests::test_single_copy ... ok
test engine::tests::test_source_bounds_check ... ok
test engine::tests::test_source_not_found ... ok
test engine::tests::test_table_full_returns_false ... ok

test result: ok. 8 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s

running 9 tests
test engine::tests::test_action_types ... ok
test engine::tests::test_counter_incrementing_no_alert ... ok
test engine::tests::test_alert_count_bounded ... ok
test engine::tests::test_counter_reset_on_activity ... ok
test engine::tests::test_empty_table ... ok
test engine::tests::test_disabled_app_ignored ... ok
test engine::tests::test_multiple_apps ... ok
test engine::tests::test_stalled_app_alert_after_max_miss ... ok
test engine::tests::test_table_full ... ok

test result: ok. 9 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s

running 17 tests
test engine::proptests::compare_matches_rust ... ok
test engine::tests::geofence_boundary_inclusive ... ok
test engine::proptests::disabled_never_fires ... ok
test engine::tests::geofence_inside_does_not_trip ... ok
test engine::tests::geofence_outside_d_trips ... ok
test engine::proptests::persistence_requires_consecutive ... ok
test engine::tests::geofence_outside_e_trips ... ok
test engine::tests::geofence_outside_n_trips_once ... ok
test engine::tests::test_bounded ... ok
test engine::tests::test_disabled ... ok
test engine::tests::test_empty ... ok
test engine::tests::test_gt_violation ... ok
test engine::tests::test_ops ... ok
test engine::tests::test_persistence ... ok
test engine::tests::test_persistence_reset ... ok
test engine::tests::test_sensor_filter ... ok
test engine::proptests::output_always_bounded ... ok

test result: ok. 17 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.02s

running 3 tests
test tests::persistence_sequence_agrees ... ok
test tests::compare_agrees ... ok
test tests::single_eval_agrees ... ok

test result: ok. 3 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.01s

running 55 tests
test command_long::tests::crc_extra_is_152 ... ok
test command_long::tests::decode_rejects_short_payload ... ok
test command_long::tests::decode_rejects_long_payload ... ok
test command_long::tests::msg_id_is_76 ... ok
test command_long::tests::field_offsets_match_spec ... ok
test command_long::tests::payload_length_is_33 ... ok
test command_long::tests::round_trip_rtl ... ok
test command_long::tests::round_trip_with_params ... ok
test command_long::tests::rtl_builder_has_zero_params ... ok
test command_long::tests::rtl_command_id_is_20 ... ok
test crc::tests::accumulate_slice_equals_individual ... ok
test crc::tests::empty_input_keeps_seed ... ok
test crc::tests::mavlink_reference_vector_123456789 ... ok
test crc::tests::order_matters ... ok
test crc::tests::single_byte_zero ... ok
test frame::tests::encode_rejects_payload_length_mismatch ... ok
test frame::tests::encode_rejects_too_small_output ... ok
test frame::tests::frame_msg_id_three_bytes_little_endian ... ok
test frame::tests::frame_payload_length_byte_matches ... ok
test frame::tests::frame_starts_with_magic_v2 ... ok
test frame::tests::peek_message_id_finds_heartbeat ... ok
test frame::tests::peek_rejects_v1_magic ... ok
test frame::tests::rejects_bad_crc ... ok
test frame::tests::rejects_truncated_header ... ok
test frame::tests::rejects_truncated_payload ... ok
test frame::tests::rejects_v1_magic ... ok
test frame::tests::rejects_wrong_crc_extra ... ok
test frame::tests::round_trip_heartbeat_through_frame ... ok
test global_position_int::tests::crc_extra_is_104 ... ok
test global_position_int::tests::decode_rejects_empty ... ok
test global_position_int::tests::decode_rejects_long_payload ... ok
test global_position_int::tests::decode_rejects_short_payload ... ok
test global_position_int::tests::field_offsets_match_spec ... ok
test global_position_int::tests::msg_id_is_33 ... ok
test global_position_int::tests::payload_length_is_28 ... ok
test command_long::tests::round_trip_arbitrary ... ok
test global_position_int::tests::round_trip_extremes ... ok
test global_position_int::tests::round_trip_sample ... ok
test frame::tests::encode_parse_round_trip_arbitrary_seq ... ok
test global_position_int::tests::round_trip_zero ... ok
test heartbeat::tests::crc_extra_is_fifty ... ok
test heartbeat::tests::custom_mode_little_endian ... ok
test heartbeat::tests::decode_empty_payload ... ok
test heartbeat::tests::decode_rejects_long_payload ... ok
test heartbeat::tests::decode_rejects_short_payload ... ok
test heartbeat::tests::field_offsets_match_spec ... ok
test heartbeat::tests::mav_mode_flag_or_and_contains ... ok
test heartbeat::tests::payload_length_constant ... ok
test heartbeat::tests::round_trip_falcon_default ... ok
test heartbeat::tests::round_trip_gcs_default ... ok
test heartbeat::tests::round_trip_max_values ... ok
test heartbeat::tests::round_trip_zero ... ok
test global_position_int::tests::round_trip_arbitrary ... ok
test heartbeat::tests::round_trip_arbitrary ... ok
test frame::tests::parser_never_panics ... ok

test result: ok. 55 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.03s

running 7 tests
test engine::tests::test_bounded_output ... ok
test engine::tests::test_disabled_entry ... ok
test engine::tests::test_empty_table ... ok
test engine::tests::test_multiple_entries ... ok
test engine::tests::test_rate_divisor_filtering ... ok
test engine::tests::test_single_dwell ... ok
test engine::tests::test_table_full ... ok

test result: ok. 7 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s

running 10 tests
test tests::high_thrust_with_torque_saturates_gracefully ... ok
test tests::mix_p01_zero_command_gives_thrust_only ... ok
test tests::mix_p02_outputs_in_unit_interval ... ok
test tests::mix_p03_pure_pitch_drives_front_and_back_motors_opposite ... ok
test tests::mix_p03_pure_roll_drives_diagonal_motor_pairs_opposite ... ok
test tests::mix_p03_pure_yaw_drives_cw_and_ccw_pairs_opposite ... ok
test tests::nan_input_does_not_propagate ... ok
test tests::negative_thrust_clipped_to_zero ... ok
test tests::mix_p03_property_single_axis ... ok
test tests::mix_p02_property ... ok

test result: ok. 10 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.01s

running 8 tests
test engine::tests::test_alignment_error ... ok
test engine::tests::test_fill_no_alignment_check ... ok
test engine::tests::test_boundary_address ... ok
test engine::tests::test_is_aligned ... ok
test engine::tests::test_out_of_range ... ok
test engine::tests::test_size_too_large ... ok
test engine::tests::test_size_zero ... ok
test engine::tests::test_valid_request ... ok

test result: ok. 8 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s

running 20 tests
test bitpack::tests::bitpack_basic_id_packs_id_and_ua_type_in_same_byte ... ok
test bitpack::tests::bitpack_basic_id_round_trip ... ok
test bitpack::tests::bitpack_location_rejects_oversize_track_byte ... ok
test bitpack::tests::bitpack_location_idempotent_after_canonicalize ... ok
test bitpack::tests::bitpack_decoder_rejects_unknown_protocol_version ... ok
test bitpack::tests::bitpack_location_rejects_wrong_message_type ... ok
test bitpack::tests::bitpack_location_round_trip_on_canonical ... ok
test tests::basic_id_header_byte_is_well_formed ... ok
test tests::basic_id_round_trip ... ok
test tests::decoder_rejects_unknown_protocol_version ... ok
test tests::location_rejects_out_of_range_timestamp ... ok
test tests::location_rejects_out_of_range_track ... ok
test tests::location_rejects_wrong_message_type ... ok
test tests::location_round_trip ... ok
test bitpack::tests::proptest_bitpack_location_round_trip_on_canonical ... ok
test bitpack::tests::proptest_bitpack_basic_id_round_trip ... ok
test bitpack::tests::proptest_bitpack_decoder_never_panics ... ok
test tests::proptest_basic_id_round_trip ... ok
test tests::proptest_decoder_never_panics ... ok
test tests::proptest_location_round_trip_in_range ... ok

test result: ok. 20 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.02s

running 13 tests
test tests::altitude_above_setpoint_reduces_thrust ... ok
test tests::degenerate_input_does_not_propagate ... ok
test tests::at_setpoint_with_zero_velocity_gives_hover_thrust ... ok
test tests::altitude_below_setpoint_increases_thrust ... ok
test tests::east_position_error_rolls_right ... ok
test tests::forward_position_error_pitches_nose_down ... ok
test tests::pos_p01_bounds_enforced ... ok
test tests::reset_clears_integral ... ok
test tests::tilt_clamped_to_tilt_max ... ok
test tests::yaw_held_when_setpoint_is_nan ... ok
test tests::yaw_setpoint_is_followed ... ok
test tests::v_setpoint_clamped_to_v_max ... ok
test tests::pos_p01_property ... ok

test result: ok. 13 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.01s

running 34 tests
test ccsds::tests::apid_masked_to_eleven_bits ... ok
test ccsds::tests::checksum_empty_is_zero ... ok
test ccsds::tests::checksum_self_inverse ... ok
test ccsds::tests::checksum_xor ... ok
test ccsds::tests::decode_too_short ... ok
test ccsds::tests::encode_then_decode_roundtrip ... ok
test ccsds::tests::header_size_is_six ... ok
test ccsds::tests::version_bits_always_zero ... ok
test compare::tests::all_ops_total_on_zero_zero ... ok
test compare::tests::less_than ... ok
test crc32::tests::deterministic ... ok
test crc32::tests::empty_is_zero ... ok
test crc32::tests::known_value_123456789 ... ok
test filter::tests::false_is_drop ... ok
test filter::tests::total_deterministic ... ok
test filter::tests::true_is_keep ... ok
test merge::tests::alternates_under_contention ... ok
test merge::tests::both_empty_is_none ... ok
test merge::tests::fairness_over_four_rounds ... ok
test merge::tests::last_flag_updates_correctly ... ok
test merge::tests::only_left_picks_left ... ok
test merge::tests::only_right_picks_right ... ok
test persistence::tests::counter_saturates ... ok
test persistence::tests::event_at_threshold_fires ... ok
test persistence::tests::event_below_threshold_is_pending ... ok
test persistence::tests::no_event_resets ... ok
test persistence::tests::persistence_zero_always_fires_on_event ... ok
test rate_divide::tests::divisor_five_emits_every_fifth ... ok
test rate_divide::tests::divisor_one_always_emits ... ok
test rate_divide::tests::divisor_zero_never_emits ... ok
test time_gate::tests::absolute_due_after ... ok
test time_gate::tests::absolute_not_due_before ... ok
test time_gate::tests::absolute_due_at_exact ... ok
test time_gate::tests::relative_equivalent_to_absolute ... ok

test result: ok. 34 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s

running 13 tests
test tests::at_zero_error_output_is_zero ... ok
test tests::fresh_pid_has_zero_state ... ok
test tests::negative_error_drives_negative_torque ... ok
test tests::out_of_range_dt_clamped_safely ... ok
test tests::positive_error_drives_positive_torque ... ok
test tests::rate_p02_infinite_setpoint_does_not_propagate ... ok
test tests::rate_p02_nan_input_does_not_propagate ... ok
test tests::output_clamped_to_torque_max ... ok
test tests::rate_p03_step_response_drives_error_to_zero ... ok
test tests::reset_clears_state ... ok
test tests::rate_p02_property ... ok
test tests::rate_p01_anti_windup_holds_integral_at_bound ... ok
test tests::rate_p01_property ... ok

test result: ok. 13 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.05s

running 11 tests
test core::tests::test_channel_isolation ... ok
test core::tests::test_duplicate_subscribe_idempotent ... ok
test core::tests::test_max_subscribers_per_channel ... ok
test core::tests::test_publish_no_subscribers ... ok
test core::tests::test_queue_full_drops_message ... ok
test core::tests::test_publish_multiple_subscribers ... ok
test core::tests::test_stats_after_unsubscribe ... ok
test core::tests::test_stats_tracking ... ok
test core::tests::test_subscribe_and_get ... ok
test core::tests::test_unsubscribe ... ok
test core::tests::test_unsubscribe_nonexistent ... ok

test result: ok. 11 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s

running 13 tests
test engine::tests::test_ats_dispatch_at_correct_time ... ok
test engine::tests::test_ats_not_dispatched_early ... ok
test engine::tests::test_ats_not_redispatched ... ok
test engine::tests::test_ats_table_full_returns_false ... ok
test engine::tests::test_dispatch_count_bounded ... ok
test engine::tests::test_empty_store_no_dispatches ... ok
test engine::tests::test_rts_sequence_execution ... ok
test engine::tests::test_rts_stop ... ok
test engine::tests::test_start_rts_empty_sequence_returns_false ... ok
test engine::tests::test_start_rts_invalid_id_returns_false ... ok
test engine::proptests::dispatch_count_always_bounded ... ok
test engine::proptests::ats_not_dispatched_early ... ok
test engine::proptests::dispatched_commands_not_redispatched ... ok

test result: ok. 13 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.01s

running 8 tests
test engine::tests::test_disabled_not_dispatched ... ok
test engine::tests::test_dispatch_at_exact_time ... ok
test engine::tests::test_dispatch_count_bounded ... ok
test engine::tests::test_empty_table_no_dispatches ... ok
test engine::tests::test_multiple_commands_different_times ... ok
test engine::tests::test_not_redispatched ... ok
test engine::tests::test_not_dispatched_early ... ok
test engine::tests::test_table_full_returns_false ... ok

test result: ok. 8 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s

running 10 tests
test engine::tests::test_bounded ... ok
test engine::tests::test_disabled ... ok
test engine::tests::test_empty ... ok
test engine::tests::test_enable ... ok
test engine::tests::test_full ... ok
test engine::tests::test_major ... ok
test engine::tests::test_match ... ok
test engine::proptests::major_frame_zero_is_wildcard ... ok
test engine::proptests::disabled_slot_never_fires ... ok
test engine::proptests::tick_output_always_bounded ... ok

test result: ok. 10 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.01s

running 8 tests
test engine::tests::test_activate_without_load_fails ... ok
test engine::tests::test_empty_registry ... ok
test engine::tests::test_double_buffer_swap ... ok
test engine::tests::test_load_and_activate ... ok
test engine::tests::test_not_found ... ok
test engine::tests::test_registry_full ... ok
test engine::tests::test_register_and_get ... ok
test engine::tests::test_size_mismatch ... ok

test result: ok. 8 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s

running 0 tests

test result: ok. 0 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s

running 7 tests
test engine::tests::test_bounded_table ... ok
test engine::tests::test_disabled_subscription ... ok
test engine::tests::test_active_count ... ok
test engine::tests::test_empty_table ... ok
test engine::tests::test_not_subscribed ... ok
test engine::tests::test_subscribe_and_include ... ok
test engine::tests::test_unsubscribe ... ok

test result: ok. 7 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s

running 0 tests

test result: ok. 0 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s

running 20 tests
test bitpack::tests::bitpack_basic_id_packs_id_and_ua_type_in_same_byte ... ok
test bitpack::tests::bitpack_basic_id_round_trip ... ok
test bitpack::tests::bitpack_decoder_rejects_unknown_protocol_version ... ok
test bitpack::tests::bitpack_location_idempotent_after_canonicalize ... ok
test bitpack::tests::bitpack_location_rejects_oversize_track_byte ... ok
test bitpack::tests::bitpack_location_rejects_wrong_message_type ... ok
test bitpack::tests::bitpack_location_round_trip_on_canonical ... ok
test tests::basic_id_header_byte_is_well_formed ... ok
test tests::basic_id_round_trip ... ok
test tests::decoder_rejects_unknown_protocol_version ... ok
test tests::location_rejects_out_of_range_timestamp ... ok
test tests::location_rejects_out_of_range_track ... ok
test tests::location_rejects_wrong_message_type ... ok
test tests::location_round_trip ... ok
test bitpack::tests::proptest_bitpack_location_round_trip_on_canonical ... ok
test bitpack::tests::proptest_bitpack_basic_id_round_trip ... ok
test bitpack::tests::proptest_bitpack_decoder_never_panics ... ok
test tests::proptest_basic_id_round_trip ... ok
test tests::proptest_location_round_trip_in_range ... ok
test tests::proptest_decoder_never_panics ... ok

test result: ok. 20 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.02s

running 0 tests

test result: ok. 0 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s

running 20 tests
test bitpack::tests::bitpack_basic_id_packs_id_and_ua_type_in_same_byte ... ok
test bitpack::tests::bitpack_basic_id_round_trip ... ok
test bitpack::tests::bitpack_decoder_rejects_unknown_protocol_version ... ok
test bitpack::tests::bitpack_location_idempotent_after_canonicalize ... ok
test bitpack::tests::bitpack_location_rejects_oversize_track_byte ... ok
test bitpack::tests::bitpack_location_rejects_wrong_message_type ... ok
test bitpack::tests::bitpack_location_round_trip_on_canonical ... ok
test tests::basic_id_header_byte_is_well_formed ... ok
test tests::basic_id_round_trip ... ok
test tests::decoder_rejects_unknown_protocol_version ... ok
test tests::location_rejects_out_of_range_timestamp ... ok
test tests::location_rejects_out_of_range_track ... ok
test tests::location_rejects_wrong_message_type ... ok
test tests::location_round_trip ... ok
test bitpack::tests::proptest_bitpack_location_round_trip_on_canonical ... ok
test bitpack::tests::proptest_bitpack_basic_id_round_trip ... ok
test tests::proptest_basic_id_round_trip ... ok
test bitpack::tests::proptest_bitpack_decoder_never_panics ... ok
test tests::proptest_location_round_trip_in_range ... ok
test tests::proptest_decoder_never_panics ... ok

test result: ok. 20 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.29s

running 0 tests

test result: ok. 0 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s

running 17 tests
test engine::proptests::compare_matches_rust ... ok
test engine::tests::geofence_boundary_inclusive ... ok
test engine::proptests::disabled_never_fires ... ok
test engine::tests::geofence_outside_d_trips ... ok
test engine::tests::geofence_inside_does_not_trip ... ok
test engine::proptests::persistence_requires_consecutive ... ok
test engine::tests::geofence_outside_e_trips ... ok
test engine::tests::geofence_outside_n_trips_once ... ok
test engine::tests::test_bounded ... ok
test engine::tests::test_disabled ... ok
test engine::tests::test_empty ... ok
test engine::tests::test_gt_violation ... ok
test engine::tests::test_ops ... ok
test engine::tests::test_persistence ... ok
test engine::tests::test_persistence_reset ... ok
test engine::tests::test_sensor_filter ... ok
test engine::proptests::output_always_bounded ... ok

test result: ok. 17 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.02s

running 0 tests

test result: ok. 0 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s

running 10 tests
test tests::att_p01_quaternion_error_is_unit_for_unit_inputs ... ok
test tests::att_p03_small_angle_within_one_percent ... ok
test tests::degenerate_input_does_not_propagate_nan ... ok
test tests::att_p01_shortest_arc_q_err_scalar_non_negative ... ok
test tests::identity_setpoint_at_identity_gives_zero_rate ... ok
test tests::negative_roll_setpoint_gives_negative_x_rate ... ok
test tests::rate_command_clamped_to_rate_max ... ok
test tests::sqrt_f32_matches_libm_within_tolerance ... ok
test tests::twenty_deg_roll_setpoint_gives_positive_x_rate ... ok
test tests::att_p01_property ... ok

test result: ok. 10 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.01s

running 0 tests

test result: ok. 0 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s

running 10 tests
test tests::att_p01_quaternion_error_is_unit_for_unit_inputs ... ok
test tests::att_p01_shortest_arc_q_err_scalar_non_negative ... ok
test tests::att_p03_small_angle_within_one_percent ... ok
test tests::degenerate_input_does_not_propagate_nan ... ok
test tests::identity_setpoint_at_identity_gives_zero_rate ... ok
test tests::negative_roll_setpoint_gives_negative_x_rate ... ok
test tests::rate_command_clamped_to_rate_max ... ok
test tests::sqrt_f32_matches_libm_within_tolerance ... ok
test tests::twenty_deg_roll_setpoint_gives_positive_x_rate ... ok
test tests::att_p01_property ... ok

test result: ok. 10 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s

running 0 tests

test result: ok. 0 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s

running 10 tests
test tests::att_p01_quaternion_error_is_unit_for_unit_inputs ... ok
test tests::att_p01_shortest_arc_q_err_scalar_non_negative ... ok
test tests::att_p03_small_angle_within_one_percent ... ok
test tests::degenerate_input_does_not_propagate_nan ... ok
test tests::identity_setpoint_at_identity_gives_zero_rate ... ok
test tests::negative_roll_setpoint_gives_negative_x_rate ... ok
test tests::rate_command_clamped_to_rate_max ... ok
test tests::sqrt_f32_matches_libm_within_tolerance ... ok
test tests::twenty_deg_roll_setpoint_gives_positive_x_rate ... ok
test tests::att_p01_property ... ok

test result: ok. 10 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.11s

running 0 tests

test result: ok. 0 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s

running 17 tests
test tests::deterministic_disturbance_recovers ... ok
test tests::deterministic_attitude_cascade_passes ... ok
test tests::deterministic_hover_settles ... ok
test tests::deterministic_step_response_passes ... ok
test tests::deterministic_mission_passes ... ok
test tests::ekf_watchdog_catches_intermittent_fault ... ok
test tests::ekf_watchdog_debounces_transient_spikes ... ok
test tests::ekf_watchdog_ignores_healthy_innovation ... ok
test tests::deterministic_geofence_catches_spoof_and_triggers_rtl ... ok
test tests::deterministic_fault_triggers_rtl ... ok
test tests::noisy_attitude_cascade_still_passes ... ok
test tests::noisy_step_response_still_passes ... ok
test tests::plant_step_full_preserves_unit_quaternion_and_finite_state ... ok
test tests::plant_step_preserves_unit_quaternion ... ok
test tests::noisy_mission_still_reaches_waypoint ... ok
test tests::noisy_fault_still_triggers_rtl ... ok
test tests::deterministic_untethered_mission_visits_all_waypoints ... ok

test result: ok. 17 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.07s

--- scenario: attitude ---
samples 5000
final ω (rad/s) [-0.0001, +0.0000, +0.0000]
peak attitude err 19.989°
RMS error (steady) 0.029° (last 1s)
convergence time 0.352s
loop wall time 906 µs
NaN/∞ seen false
outcome PASS
falcon-sitl-hover: PASS

running 13 tests
test tests::at_zero_error_output_is_zero ... ok
test tests::fresh_pid_has_zero_state ... ok
test tests::negative_error_drives_negative_torque ... ok
test tests::out_of_range_dt_clamped_safely ... ok
test tests::positive_error_drives_positive_torque ... ok
test tests::rate_p02_infinite_setpoint_does_not_propagate ... ok
test tests::rate_p02_nan_input_does_not_propagate ... ok
test tests::output_clamped_to_torque_max ... ok
test tests::rate_p03_step_response_drives_error_to_zero ... ok
test tests::reset_clears_state ... ok
test tests::rate_p02_property ... ok
test tests::rate_p01_anti_windup_holds_integral_at_bound ... ok
test tests::rate_p01_property ... ok

test result: ok. 13 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.04s

running 0 tests

test result: ok. 0 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s

running 13 tests
test tests::at_zero_error_output_is_zero ... ok
test tests::fresh_pid_has_zero_state ... ok
test tests::negative_error_drives_negative_torque ... ok
test tests::out_of_range_dt_clamped_safely ... ok
test tests::positive_error_drives_positive_torque ... ok
test tests::rate_p02_infinite_setpoint_does_not_propagate ... ok
test tests::rate_p02_nan_input_does_not_propagate ... ok
test tests::output_clamped_to_torque_max ... ok
test tests::rate_p03_step_response_drives_error_to_zero ... ok
test tests::rate_p02_property ... ok
test tests::reset_clears_state ... ok
test tests::rate_p01_property ... ok
test tests::rate_p01_anti_windup_holds_integral_at_bound ... ok

test result: ok. 13 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s

running 0 tests

test result: ok. 0 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s

running 13 tests
test tests::at_zero_error_output_is_zero ... ok
test tests::fresh_pid_has_zero_state ... ok
test tests::out_of_range_dt_clamped_safely ... ok
test tests::negative_error_drives_negative_torque ... ok
test tests::positive_error_drives_positive_torque ... ok
test tests::rate_p02_infinite_setpoint_does_not_propagate ... ok
test tests::rate_p02_nan_input_does_not_propagate ... ok
test tests::output_clamped_to_torque_max ... ok
test tests::rate_p03_step_response_drives_error_to_zero ... ok
test tests::reset_clears_state ... ok
test tests::rate_p01_anti_windup_holds_integral_at_bound ... ok
test tests::rate_p02_property ... ok
test tests::rate_p01_property ... ok

test result: ok. 13 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.60s

running 0 tests

test result: ok. 0 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s

running 17 tests
test tests::deterministic_disturbance_recovers ... ok
test tests::deterministic_attitude_cascade_passes ... ok
test tests::deterministic_hover_settles ... ok
test tests::deterministic_step_response_passes ... ok
test tests::deterministic_mission_passes ... ok
test tests::ekf_watchdog_catches_intermittent_fault ... ok
test tests::ekf_watchdog_debounces_transient_spikes ... ok
test tests::ekf_watchdog_ignores_healthy_innovation ... ok
test tests::deterministic_geofence_catches_spoof_and_triggers_rtl ... ok
test tests::deterministic_fault_triggers_rtl ... ok
test tests::noisy_attitude_cascade_still_passes ... ok
test tests::noisy_step_response_still_passes ... ok
test tests::plant_step_full_preserves_unit_quaternion_and_finite_state ... ok
test tests::plant_step_preserves_unit_quaternion ... ok
test tests::noisy_mission_still_reaches_waypoint ... ok
test tests::noisy_fault_still_triggers_rtl ... ok
test tests::deterministic_untethered_mission_visits_all_waypoints ... ok

test result: ok. 17 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.08s

--- scenario: step ---
samples 5000
final ω (rad/s) [+0.5007, -0.3003, +0.4006]
peak ω above sp 0.0061 rad/s
overshoot 1.2 %
RMS error (steady) 0.0012 rad/s
convergence time 0.139s
loop wall time 721 µs
NaN/∞ seen false
outcome PASS
--- scenario: disturbance ---
samples 5000
final ω (rad/s) [+0.0000, -0.0042, +0.0000]
peak ω above sp 0.8958 rad/s
recovery time 0.141s after impulse
loop wall time 681 µs
NaN/∞ seen false
outcome PASS
--- scenario: hover ---
samples 5000
final ω (rad/s) [-0.0020, +0.0013, -0.0007]
peak ω above sp 0.7683 rad/s
convergence time 0.175s
loop wall time 890 µs
NaN/∞ seen false
outcome PASS
--- scenario: attitude ---
samples 5000
final ω (rad/s) [-0.0001, +0.0000, +0.0000]
peak attitude err 19.989°
RMS error (steady) 0.029° (last 1s)
convergence time 0.352s
loop wall time 925 µs
NaN/∞ seen false
outcome PASS
--- scenario: mission ---
samples 12000
final v (m/s NED) [-0.004, +0.000, +0.003]
peak distance error 10.000 m
final distance 0.010 m
RMS distance (steady)0.015 m (last 2s)
convergence time 4.045s
loop wall time 3034 µs
NaN/∞ seen false
outcome PASS
--- scenario: fault ---
samples 16000
final position (NED) [-37.92, +0.00, +137.55] m
peak EKF innovation 0.9521
RTL detection 0.047s after fault injection
loop wall time 7486 µs
NaN/∞ seen false
outcome PASS
--- scenario: untethered ---
samples 36000
final position (NED) [+0.00, -0.00, -0.01] m
worst waypoint min 0.082 m
final distance home 0.011 m
mission completed in 32.0s
loop wall time 14502 µs
NaN/∞ seen false
outcome PASS
--- scenario: geofence ---
samples 16000
final position (NED) [+9.99, +0.00, -0.02] m
peak true-N (truth) +16.35 m (fence at +15.00 m)
geofence violation at 5.834s
loop wall time 6257 µs
NaN/∞ seen false
outcome PASS
falcon-sitl-hover: PASS

running 55 tests
test command_long::tests::crc_extra_is_152 ... ok
test command_long::tests::decode_rejects_short_payload ... ok
test command_long::tests::decode_rejects_long_payload ... ok
test command_long::tests::field_offsets_match_spec ... ok
test command_long::tests::msg_id_is_76 ... ok
test command_long::tests::payload_length_is_33 ... ok
test command_long::tests::round_trip_rtl ... ok
test command_long::tests::round_trip_with_params ... ok
test command_long::tests::rtl_builder_has_zero_params ... ok
test command_long::tests::rtl_command_id_is_20 ... ok
test crc::tests::accumulate_slice_equals_individual ... ok
test crc::tests::empty_input_keeps_seed ... ok
test crc::tests::mavlink_reference_vector_123456789 ... ok
test crc::tests::single_byte_zero ... ok
test crc::tests::order_matters ... ok
test frame::tests::encode_rejects_payload_length_mismatch ... ok
test frame::tests::encode_rejects_too_small_output ... ok
test frame::tests::frame_msg_id_three_bytes_little_endian ... ok
test frame::tests::frame_payload_length_byte_matches ... ok
test frame::tests::frame_starts_with_magic_v2 ... ok
test frame::tests::peek_message_id_finds_heartbeat ... ok
test frame::tests::peek_rejects_v1_magic ... ok
test frame::tests::rejects_bad_crc ... ok
test frame::tests::rejects_truncated_header ... ok
test frame::tests::rejects_truncated_payload ... ok
test frame::tests::rejects_v1_magic ... ok
test frame::tests::rejects_wrong_crc_extra ... ok
test frame::tests::round_trip_heartbeat_through_frame ... ok
test global_position_int::tests::crc_extra_is_104 ... ok
test global_position_int::tests::decode_rejects_empty ... ok
test global_position_int::tests::decode_rejects_long_payload ... ok
test global_position_int::tests::decode_rejects_short_payload ... ok
test global_position_int::tests::field_offsets_match_spec ... ok
test global_position_int::tests::msg_id_is_33 ... ok
test global_position_int::tests::payload_length_is_28 ... ok
test command_long::tests::round_trip_arbitrary ... ok
test frame::tests::encode_parse_round_trip_arbitrary_seq ... ok
test global_position_int::tests::round_trip_extremes ... ok
test global_position_int::tests::round_trip_sample ... ok
test global_position_int::tests::round_trip_zero ... ok
test heartbeat::tests::crc_extra_is_fifty ... ok
test heartbeat::tests::custom_mode_little_endian ... ok
test heartbeat::tests::decode_empty_payload ... ok
test heartbeat::tests::decode_rejects_long_payload ... ok
test heartbeat::tests::decode_rejects_short_payload ... ok
test heartbeat::tests::field_offsets_match_spec ... ok
test heartbeat::tests::mav_mode_flag_or_and_contains ... ok
test heartbeat::tests::payload_length_constant ... ok
test global_position_int::tests::round_trip_arbitrary ... ok
test heartbeat::tests::round_trip_falcon_default ... ok
test heartbeat::tests::round_trip_gcs_default ... ok
test heartbeat::tests::round_trip_max_values ... ok
test heartbeat::tests::round_trip_zero ... ok
test heartbeat::tests::round_trip_arbitrary ... ok
test frame::tests::parser_never_panics ... ok

test result: ok. 55 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.03s

running 0 tests

test result: ok. 0 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s

running 10 tests
test hackrf::tests::gps_sdr_sim_argv_shape_is_stable ... ok
test mavlink::tests::altitude_translates_to_down ... ok
test mavlink::tests::build_frame_carries_correct_message_id ... ok
test hackrf::tests::hackrf_argv_shape_is_stable ... ok
test mavlink::tests::home_projects_to_origin ... ok
test mavlink::tests::mavlink_bench_no_violation_no_latch ... ok
test mavlink::tests::mavlink_bench_trips_and_dispatches_on_spoof ... ok
test mavlink::tests::one_hundred_metres_north_projects_to_10000_cm_n ... ok
test stub::tests::stub_bench_no_violation_no_latch ... ok
test stub::tests::stub_bench_trips_and_dispatches ... ok

test result: ok. 10 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s

running 6 tests
test physics::tests::gazebo_stub_compiles_and_returns_zeros ... ok
test physics::tests::mock_physics_hover_with_full_thrust_climbs ... ok
test physics::tests::mock_physics_at_rest_stays_quiet ... ok
test physics::tests::mock_physics_measure_returns_sensible_imu ... ok
test tests::gazebo_stub_does_not_panic ... ok
test tests::mock_backend_climbs_under_full_thrust ... ok

test result: ok. 6 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s

falcon-sitl-gz: backend=mock duration=5s
verdict: backend=mock steps=500 climb=48.37 m (min=0.00 max=48.37)
PASS

running 9 tests
test tests::fresh_stub_has_zero_time ... ok
test tests::deterministic_across_ticks_with_same_time ... ok
test tests::innovation_is_quiet_in_stub ... ok
test tests::tick_passes_time_through ... ok
test tests::tick_returns_identity_quaternion ... ok
test tests::tick_returns_zero_position_and_velocity ... ok
test tests::unit_quaternion_check_rejects_clearly_non_unit ... ok
test tests::tick_innovation_within_healthy_range ... ok
test tests::tick_always_emits_unit_quaternion ... ok

test result: ok. 9 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.01s

running 0 tests

test result: ok. 0 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s

running 9 tests
test tests::deterministic_across_ticks_with_same_time ... ok
test tests::fresh_stub_has_zero_time ... ok
test tests::innovation_is_quiet_in_stub ... ok
test tests::tick_passes_time_through ... ok
test tests::tick_returns_identity_quaternion ... ok
test tests::tick_returns_zero_position_and_velocity ... ok
test tests::tick_always_emits_unit_quaternion ... ok
test tests::tick_innovation_within_healthy_range ... ok
test tests::unit_quaternion_check_rejects_clearly_non_unit ... ok

test result: ok. 9 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s

running 0 tests

test result: ok. 0 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s

running 9 tests
test tests::deterministic_across_ticks_with_same_time ... ok
test tests::fresh_stub_has_zero_time ... ok
test tests::innovation_is_quiet_in_stub ... ok
test tests::tick_passes_time_through ... ok
test tests::tick_returns_identity_quaternion ... ok
test tests::unit_quaternion_check_rejects_clearly_non_unit ... ok
test tests::tick_returns_zero_position_and_velocity ... ok
test tests::tick_innovation_within_healthy_range ... ok
test tests::tick_always_emits_unit_quaternion ... ok

test result: ok. 9 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.09s

running 0 tests

test result: ok. 0 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s

running 13 tests
test tests::altitude_above_setpoint_reduces_thrust ... ok
test tests::degenerate_input_does_not_propagate ... ok
test tests::at_setpoint_with_zero_velocity_gives_hover_thrust ... ok
test tests::altitude_below_setpoint_increases_thrust ... ok
test tests::east_position_error_rolls_right ... ok
test tests::forward_position_error_pitches_nose_down ... ok
test tests::pos_p01_bounds_enforced ... ok
test tests::reset_clears_integral ... ok
test tests::tilt_clamped_to_tilt_max ... ok
test tests::yaw_held_when_setpoint_is_nan ... ok
test tests::yaw_setpoint_is_followed ... ok
test tests::v_setpoint_clamped_to_v_max ... ok
test tests::pos_p01_property ... ok

test result: ok. 13 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.01s

running 0 tests

test result: ok. 0 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s

running 13 tests
test tests::altitude_above_setpoint_reduces_thrust ... ok
test tests::altitude_below_setpoint_increases_thrust ... ok
test tests::degenerate_input_does_not_propagate ... ok
test tests::at_setpoint_with_zero_velocity_gives_hover_thrust ... ok
test tests::east_position_error_rolls_right ... ok
test tests::forward_position_error_pitches_nose_down ... ok
test tests::pos_p01_bounds_enforced ... ok
test tests::reset_clears_integral ... ok
test tests::tilt_clamped_to_tilt_max ... ok
test tests::v_setpoint_clamped_to_v_max ... ok
test tests::yaw_held_when_setpoint_is_nan ... ok
test tests::yaw_setpoint_is_followed ... ok
test tests::pos_p01_property ... ok

test result: ok. 13 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s

running 0 tests

test result: ok. 0 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s

running 13 tests
test tests::altitude_below_setpoint_increases_thrust ... ok
test tests::at_setpoint_with_zero_velocity_gives_hover_thrust ... ok
test tests::altitude_above_setpoint_reduces_thrust ... ok
test tests::degenerate_input_does_not_propagate ... ok
test tests::east_position_error_rolls_right ... ok
test tests::forward_position_error_pitches_nose_down ... ok
test tests::pos_p01_bounds_enforced ... ok
test tests::reset_clears_integral ... ok
test tests::yaw_held_when_setpoint_is_nan ... ok
test tests::tilt_clamped_to_tilt_max ... ok
test tests::yaw_setpoint_is_followed ... ok
test tests::v_setpoint_clamped_to_v_max ... ok
test tests::pos_p01_property ... ok

test result: ok. 13 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.11s

running 0 tests

test result: ok. 0 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s

running 17 tests
test tests::deterministic_disturbance_recovers ... ok
test tests::deterministic_attitude_cascade_passes ... ok
test tests::deterministic_hover_settles ... ok
test tests::deterministic_step_response_passes ... ok
test tests::deterministic_mission_passes ... ok
test tests::ekf_watchdog_catches_intermittent_fault ... ok
test tests::ekf_watchdog_debounces_transient_spikes ... ok
test tests::ekf_watchdog_ignores_healthy_innovation ... ok
test tests::deterministic_geofence_catches_spoof_and_triggers_rtl ... ok
test tests::deterministic_fault_triggers_rtl ... ok
test tests::noisy_attitude_cascade_still_passes ... ok
test tests::noisy_step_response_still_passes ... ok
test tests::plant_step_full_preserves_unit_quaternion_and_finite_state ... ok
test tests::plant_step_preserves_unit_quaternion ... ok
test tests::noisy_mission_still_reaches_waypoint ... ok
test tests::noisy_fault_still_triggers_rtl ... ok
test tests::deterministic_untethered_mission_visits_all_waypoints ... ok

test result: ok. 17 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.07s

--- scenario: mission ---
samples 12000
final v (m/s NED) [-0.004, +0.000, +0.003]
peak distance error 10.000 m
final distance 0.010 m
RMS distance (steady)0.015 m (last 2s)
convergence time 4.045s
loop wall time 2453 µs
NaN/∞ seen false
outcome PASS
falcon-sitl-hover: PASS

falcon verification gate (type: sw-verification, filter: (has-tag "falcon"))

32 artifact(s) matched: FV-FALCON-HITL-002, FV-FALCON-TQ-001, FV-FALCON-SIM-004, FV-FALCON-EKF-001, FV-FALCON-UAM-001, FV-FALCON-COV-005, FV-FALCON-FAULT-001, FV-FALCON-HITL-001, FV-FALCON-COV-001, FV-FALCON-WORLD-001, FV-FALCON-PIPELINE-001, FV-FALCON-MAVLINK-002, FV-FALCON-NID-002, FV-FALCON-MIX-001, FV-FALCON-COV-002, FV-FALCON-NID-001, FV-FALCON-GEO-002, FV-FALCON-ATT-001, FV-FALCON-RATE-001, FV-FALCON-SIM-002, FV-FALCON-COV-004, FV-FALCON-SIM-001, FV-FALCON-ARCH-001, FV-FALCON-SIM-003, FV-FALCON-EKF-STUB-001, FV-FALCON-POS-001, FV-FALCON-GEO-003, FV-FALCON-COV-003, FV-FALCON-ARCH-002, FV-FALCON-MAVLINK-001, FV-FALCON-SIM-005, FV-FALCON-GEO-001

[ PASS] ( 9.00s) FV-FALCON-HITL-002: cargo test -p relay-mavlink
[ PASS] ( 0.52s) FV-FALCON-HITL-002: cargo test -p falcon-hitl-rfspoof
[ skip-bench-only] FV-FALCON-HITL-002: MIRIFLAGS=-Zmiri-disable-isolation cargo +nightly miri test -p falcon-hitl-rfspoof --bin falcon-hitl-rfspoof mavlink::tests
[ skip-bench-only] FV-FALCON-HITL-002: cargo run -p falcon-hitl-rfspoof -- --backend=mavlink --listen=0.0.0.0:14550
[ PASS] ( 0.00s) FV-FALCON-TQ-001: ls docs/dossier/tool-qualification/
[ PASS] ( 0.01s) FV-FALCON-TQ-001: wc -l docs/dossier/tool-qualification/.md
[ PASS] ( 1.15s) FV-FALCON-SIM-004: cargo test -p falcon-sitl-gz
[ skip-bench-only] FV-FALCON-SIM-004: cargo test -p falcon-sitl-gz --features gazebo
[ skip-bench-only] FV-FALCON-SIM-004: cargo run -p falcon-sitl-gz --features gazebo -- --backend=gazebo --world=falcon --model=quad
[ PASS] ( 0.45s) FV-FALCON-EKF-001: cargo test -p relay-ekf
[ PASS] ( 10.86s) FV-FALCON-EKF-001: cargo test -p relay-ekf --release
[ PASS] ( 0.88s) FV-FALCON-EKF-001: PROPTEST_CASES=4096 cargo test -p relay-ekf
[ PASS] ( 0.20s) FV-FALCON-EKF-001: cargo test -p falcon-ekf-bench
[ PASS] ( 0.23s) FV-FALCON-EKF-001: cargo run -q -p falcon-ekf-bench --release
[ PASS] ( 0.35s) FV-FALCON-UAM-001: cargo test -p falcon-sitl-hover tests::deterministic_untethered_mission_visits_all_waypoints
[ PASS] ( 74.80s) FV-FALCON-COV-005: cargo build -p witness-wasi-harness
[ skip-bench-only] FV-FALCON-COV-005: WITNESS_HARNESS_INVOKES="run_inside" $WITNESS run /tmp/instr.wasm --harness target/debug/witness-wasi-harness -o /tmp/run.json
[ skip-bench-only] FV-FALCON-FAULT-001: bazel test //:relay_hs_verus_test
[ PASS] ( 0.21s) FV-FALCON-FAULT-001: cargo test -p relay-hs
[ PASS] ( 0.15s) FV-FALCON-FAULT-001: cargo test -p falcon-sitl-hover
[ skip-bench-only] FV-FALCON-FAULT-001: cargo kani -p relay-hs
[ PASS] ( 0.08s) FV-FALCON-HITL-001: cargo test -p falcon-hitl-rfspoof
[ PASS] ( 0.23s) FV-FALCON-HITL-001: cargo run -p falcon-hitl-rfspoof
[ skip-bench-only] FV-FALCON-HITL-001: cargo run -p falcon-hitl-rfspoof -- --backend=hackrf --duration=30
[ skip-bench-only] FV-FALCON-COV-001: bazel build //:geofence-subject-coverage
[ skip-bench-only] FV-FALCON-COV-001: cat bazel-bin/geofence-subject-coverage_witness-run.json
[ skip-bench-only] FV-FALCON-COV-001: bazel build //:falcon-cascade-coverage
[ PASS] ( 0.38s) FV-FALCON-WORLD-001: cargo test -p falcon-hello
[ PASS] ( 4.82s) FV-FALCON-WORLD-001: scripts/falcon-hello-demo.sh
[ PASS] ( 0.39s) FV-FALCON-PIPELINE-001: cargo test -p relay-mix-quad
[ PASS] ( 0.47s) FV-FALCON-PIPELINE-001: cargo test -p relay-rate
[ PASS] ( 0.16s) FV-FALCON-PIPELINE-001: cargo test -p falcon-sitl-hover
[ skip-bench-only] FV-FALCON-MAVLINK-002: bazel test //:relay_mavlink_verus_test
[ PASS] ( 0.15s) FV-FALCON-MAVLINK-002: cargo test -p relay-mavlink
[ skip-bench-only] FV-FALCON-NID-002: bazel test //:relay_nid_verus_test
[ PASS] ( 0.61s) FV-FALCON-NID-002: cargo test -p relay-nid
[ PASS] ( 0.12s) FV-FALCON-MIX-001: cargo test -p relay-mix-quad
[ PASS] ( 0.79s) FV-FALCON-MIX-001: cargo test -p relay-mix-quad --release
[ PASS] ( 0.21s) FV-FALCON-MIX-001: PROPTEST_CASES=4096 cargo test -p relay-mix-quad
[ PASS] ( 78.57s) FV-FALCON-COV-002: cargo llvm-cov --workspace --summary-only
[ PASS] ( 5.10s) FV-FALCON-COV-002: cargo llvm-cov --workspace --lcov --output-path coverage.lcov
[ PASS] ( 0.13s) FV-FALCON-NID-001: cargo test -p relay-nid
[ PASS] ( 0.40s) FV-FALCON-NID-001: PROPTEST_CASES=4096 cargo test -p relay-nid
[ skip-bench-only] FV-FALCON-NID-001: cargo kani -p relay-nid
[ skip-bench-only] FV-FALCON-GEO-002: cargo kani -p relay-lc
[ PASS] ( 0.48s) FV-FALCON-GEO-002: cargo test -p relay-lc
[ PASS] ( 0.37s) FV-FALCON-ATT-001: cargo test -p relay-att
[ PASS] ( 0.62s) FV-FALCON-ATT-001: cargo test -p relay-att --release
[ PASS] ( 0.22s) FV-FALCON-ATT-001: PROPTEST_CASES=4096 cargo test -p relay-att
[ PASS] ( 0.16s) FV-FALCON-ATT-001: cargo test -p falcon-sitl-hover
[ PASS] ( 0.72s) FV-FALCON-ATT-001: cargo run -q -p falcon-sitl-hover --release -- --scenario attitude
[ PASS] ( 0.15s) FV-FALCON-RATE-001: cargo test -p relay-rate
[ PASS] ( 0.85s) FV-FALCON-RATE-001: cargo test -p relay-rate --release
[ PASS] ( 0.71s) FV-FALCON-RATE-001: PROPTEST_CASES=4096 cargo test -p relay-rate
[ PASS] ( 0.16s) FV-FALCON-RATE-001: cargo test -p falcon-sitl-hover
[ PASS] ( 0.12s) FV-FALCON-RATE-001: cargo run -q -p falcon-sitl-hover --release
[ PASS] ( 0.15s) FV-FALCON-SIM-002: cargo test -p relay-mavlink
[ PASS] ( 0.09s) FV-FALCON-SIM-002: cargo test -p falcon-hitl-rfspoof
[ skip-bench-only] FV-FALCON-SIM-002: cargo run -p falcon-hitl-rfspoof -- --preset=px4-sitl
[ PASS] (140.37s) FV-FALCON-COV-004: cargo build -p witness-wasi-harness --release
[ skip-bench-only] FV-FALCON-COV-004: $WITNESS run /path/to/instrumented.wasm --output run.json --harness target/release/witness-wasi-harness
[ skip-bench-only] FV-FALCON-SIM-001: cargo run -p falcon-hitl-rfspoof -- --preset=px4-sitl --duration=1
[ skip-bench-only] FV-FALCON-SIM-001: cd ~/git/PX4-Autopilot && make px4_sitl jmavsim
[ skip-bench-only] FV-FALCON-SIM-001: cargo run -p falcon-hitl-rfspoof -- --preset=px4-sitl
[ skip-bench-only] FV-FALCON-ARCH-001: spar parse spar/
.aadl
[ skip-bench-only] FV-FALCON-ARCH-001: spar instance --root Falcon_System::Falcon.Quad spar/.aadl
[ skip-bench-only] FV-FALCON-ARCH-001: spar analyze --root Falcon_System::Falcon.Quad spar/
.aadl
[ skip-bench-only] FV-FALCON-ARCH-001: spar render --root Falcon_System::Falcon.Quad -o artifacts/spar/falcon-quad-architecture.svg spar/*.aadl
[ PASS] ( 0.09s) FV-FALCON-SIM-003: cargo test -p falcon-sitl-gz
[ PASS] ( 0.20s) FV-FALCON-SIM-003: cargo run -p falcon-sitl-gz
[ skip-bench-only] FV-FALCON-SIM-003: cargo run -p falcon-sitl-gz -- --backend=gazebo --world=falcon --model=quad
[ PASS] ( 0.39s) FV-FALCON-EKF-STUB-001: cargo test -p relay-ekf-stub
[ PASS] ( 0.76s) FV-FALCON-EKF-STUB-001: cargo test -p relay-ekf-stub --release
[ PASS] ( 0.20s) FV-FALCON-EKF-STUB-001: PROPTEST_CASES=4096 cargo test -p relay-ekf-stub
[ PASS] ( 0.37s) FV-FALCON-POS-001: cargo test -p relay-pos
[ PASS] ( 0.57s) FV-FALCON-POS-001: cargo test -p relay-pos --release
[ PASS] ( 0.22s) FV-FALCON-POS-001: PROPTEST_CASES=4096 cargo test -p relay-pos
[ PASS] ( 0.16s) FV-FALCON-POS-001: cargo test -p falcon-sitl-hover
[ PASS] ( 0.08s) FV-FALCON-POS-001: cargo run -q -p falcon-sitl-hover --release -- --scenario mission
[ skip-bench-only] FV-FALCON-GEO-003: rustup component add miri --toolchain nightly
[ skip-bench-only] FV-FALCON-GEO-003: MIRIFLAGS=-Zmiri-disable-isolation cargo +nightly miri test -p relay-lc --lib geofence
[ skip-bench-only] FV-FALCON-GEO-003: MIRIFLAGS=-Zmiri-disable-isolation cargo +nightly miri test -p falcon-hitl-rfspoof --bin falcon-hitl-rfspoof stub::tests
running 55 tests
test command_long::tests::crc_extra_is_152 ... ok
test command_long::tests::decode_rejects_long_payload ... ok
test command_long::tests::decode_rejects_short_payload ... ok
test command_long::tests::field_offsets_match_spec ... ok
test command_long::tests::msg_id_is_76 ... ok
test command_long::tests::payload_length_is_33 ... ok
test command_long::tests::round_trip_rtl ... ok
test command_long::tests::round_trip_with_params ... ok
test command_long::tests::rtl_builder_has_zero_params ... ok
test command_long::tests::rtl_command_id_is_20 ... ok
test crc::tests::accumulate_slice_equals_individual ... ok
test crc::tests::empty_input_keeps_seed ... ok
test crc::tests::mavlink_reference_vector_123456789 ... ok
test crc::tests::order_matters ... ok
test crc::tests::single_byte_zero ... ok
test frame::tests::encode_rejects_payload_length_mismatch ... ok
test frame::tests::encode_rejects_too_small_output ... ok
test frame::tests::frame_msg_id_three_bytes_little_endian ... ok
test frame::tests::frame_payload_length_byte_matches ... ok
test frame::tests::frame_starts_with_magic_v2 ... ok
test frame::tests::peek_message_id_finds_heartbeat ... ok
test frame::tests::peek_rejects_v1_magic ... ok
test frame::tests::rejects_bad_crc ... ok
test frame::tests::rejects_truncated_header ... ok
test frame::tests::rejects_truncated_payload ... ok
test frame::tests::rejects_v1_magic ... ok
test frame::tests::rejects_wrong_crc_extra ... ok
test frame::tests::round_trip_heartbeat_through_frame ... ok
test global_position_int::tests::crc_extra_is_104 ... ok
test global_position_int::tests::decode_rejects_empty ... ok
test global_position_int::tests::decode_rejects_long_payload ... ok
test global_position_int::tests::decode_rejects_short_payload ... ok
test global_position_int::tests::field_offsets_match_spec ... ok
test global_position_int::tests::msg_id_is_33 ... ok
test global_position_int::tests::payload_length_is_28 ... ok
test frame::tests::encode_parse_round_trip_arbitrary_seq ... ok
test global_position_int::tests::round_trip_extremes ... ok
test command_long::tests::round_trip_arbitrary ... ok
test global_position_int::tests::round_trip_sample ... ok
test global_position_int::tests::round_trip_zero ... ok
test heartbeat::tests::crc_extra_is_fifty ... ok
test heartbeat::tests::custom_mode_little_endian ... ok
test heartbeat::tests::decode_empty_payload ... ok
test heartbeat::tests::decode_rejects_long_payload ... ok
test heartbeat::tests::decode_rejects_short_payload ... ok
test heartbeat::tests::field_offsets_match_spec ... ok
test heartbeat::tests::mav_mode_flag_or_and_contains ... ok
test heartbeat::tests::payload_length_constant ... ok
test heartbeat::tests::round_trip_falcon_default ... ok
test heartbeat::tests::round_trip_gcs_default ... ok
test heartbeat::tests::round_trip_max_values ... ok
test heartbeat::tests::round_trip_zero ... ok
test global_position_int::tests::round_trip_arbitrary ... ok
test heartbeat::tests::round_trip_arbitrary ... ok
test frame::tests::parser_never_panics ... ok

test result: ok. 55 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.03s

running 0 tests

test result: ok. 0 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s

running 55 tests
test command_long::tests::crc_extra_is_152 ... ok
test command_long::tests::decode_rejects_long_payload ... ok
test command_long::tests::field_offsets_match_spec ... ok
test command_long::tests::decode_rejects_short_payload ... ok
test command_long::tests::payload_length_is_33 ... ok
test command_long::tests::msg_id_is_76 ... ok
test command_long::tests::round_trip_rtl ... ok
test command_long::tests::round_trip_with_params ... ok
test command_long::tests::rtl_builder_has_zero_params ... ok
test command_long::tests::rtl_command_id_is_20 ... ok
test crc::tests::accumulate_slice_equals_individual ... ok
test crc::tests::empty_input_keeps_seed ... ok
test crc::tests::mavlink_reference_vector_123456789 ... ok
test command_long::tests::round_trip_arbitrary ... ok
test crc::tests::order_matters ... ok
test crc::tests::single_byte_zero ... ok
test frame::tests::encode_rejects_payload_length_mismatch ... ok
test frame::tests::encode_rejects_too_small_output ... ok
test frame::tests::frame_msg_id_three_bytes_little_endian ... ok
test frame::tests::frame_payload_length_byte_matches ... ok
test frame::tests::frame_starts_with_magic_v2 ... ok
test frame::tests::encode_parse_round_trip_arbitrary_seq ... ok
test frame::tests::peek_message_id_finds_heartbeat ... ok
test frame::tests::peek_rejects_v1_magic ... ok
test frame::tests::rejects_bad_crc ... ok
test frame::tests::rejects_truncated_header ... ok
test frame::tests::rejects_truncated_payload ... ok
test frame::tests::rejects_v1_magic ... ok
test frame::tests::rejects_wrong_crc_extra ... ok
test frame::tests::round_trip_heartbeat_through_frame ... ok
test global_position_int::tests::crc_extra_is_104 ... ok
test global_position_int::tests::decode_rejects_empty ... ok
test global_position_int::tests::decode_rejects_long_payload ... ok
test global_position_int::tests::decode_rejects_short_payload ... ok
test global_position_int::tests::field_offsets_match_spec ... ok
test global_position_int::tests::msg_id_is_33 ... ok
test global_position_int::tests::payload_length_is_28 ... ok
test global_position_int::tests::round_trip_extremes ... ok
test global_position_int::tests::round_trip_sample ... ok
test global_position_int::tests::round_trip_zero ... ok
test heartbeat::tests::crc_extra_is_fifty ... ok
test heartbeat::tests::custom_mode_little_endian ... ok
test global_position_int::tests::round_trip_arbitrary ... ok
test heartbeat::tests::decode_empty_payload ... ok
test heartbeat::tests::decode_rejects_long_payload ... ok
test heartbeat::tests::decode_rejects_short_payload ... ok
test heartbeat::tests::field_offsets_match_spec ... ok
test heartbeat::tests::mav_mode_flag_or_and_contains ... ok
test frame::tests::parser_never_panics ... ok
test heartbeat::tests::payload_length_constant ... ok
test heartbeat::tests::round_trip_falcon_default ... ok
test heartbeat::tests::round_trip_max_values ... ok
test heartbeat::tests::round_trip_arbitrary ... ok
test heartbeat::tests::round_trip_zero ... ok
test heartbeat::tests::round_trip_gcs_default ... ok

test result: ok. 55 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s

running 0 tests

test result: ok. 0 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s

running 55 tests
test command_long::tests::crc_extra_is_152 ... ok
test command_long::tests::decode_rejects_short_payload ... ok
test command_long::tests::decode_rejects_long_payload ... ok
test command_long::tests::field_offsets_match_spec ... ok
test command_long::tests::msg_id_is_76 ... ok
test command_long::tests::payload_length_is_33 ... ok
test command_long::tests::round_trip_rtl ... ok
test command_long::tests::round_trip_with_params ... ok
test command_long::tests::rtl_builder_has_zero_params ... ok
test command_long::tests::rtl_command_id_is_20 ... ok
test crc::tests::accumulate_slice_equals_individual ... ok
test crc::tests::empty_input_keeps_seed ... ok
test crc::tests::mavlink_reference_vector_123456789 ... ok
test crc::tests::order_matters ... ok
test crc::tests::single_byte_zero ... ok
test frame::tests::encode_rejects_payload_length_mismatch ... ok
test frame::tests::encode_rejects_too_small_output ... ok
test frame::tests::frame_msg_id_three_bytes_little_endian ... ok
test frame::tests::frame_payload_length_byte_matches ... ok
test frame::tests::frame_starts_with_magic_v2 ... ok
test frame::tests::peek_message_id_finds_heartbeat ... ok
test frame::tests::peek_rejects_v1_magic ... ok
test frame::tests::rejects_bad_crc ... ok
test frame::tests::rejects_truncated_header ... ok
test frame::tests::rejects_truncated_payload ... ok
test frame::tests::rejects_v1_magic ... ok
test frame::tests::rejects_wrong_crc_extra ... ok
test frame::tests::round_trip_heartbeat_through_frame ... ok
test global_position_int::tests::crc_extra_is_104 ... ok
test global_position_int::tests::decode_rejects_empty ... ok
test global_position_int::tests::decode_rejects_long_payload ... ok
test global_position_int::tests::decode_rejects_short_payload ... ok
test global_position_int::tests::field_offsets_match_spec ... ok
test global_position_int::tests::msg_id_is_33 ... ok
test global_position_int::tests::payload_length_is_28 ... ok
test frame::tests::encode_parse_round_trip_arbitrary_seq ... ok
test command_long::tests::round_trip_arbitrary ... ok
test global_position_int::tests::round_trip_extremes ... ok
test global_position_int::tests::round_trip_sample ... ok
test global_position_int::tests::round_trip_zero ... ok
test heartbeat::tests::crc_extra_is_fifty ... ok
test heartbeat::tests::custom_mode_little_endian ... ok
test heartbeat::tests::decode_empty_payload ... ok
test heartbeat::tests::decode_rejects_long_payload ... ok
test heartbeat::tests::decode_rejects_short_payload ... ok
test heartbeat::tests::field_offsets_match_spec ... ok
test heartbeat::tests::mav_mode_flag_or_and_contains ... ok
test heartbeat::tests::payload_length_constant ... ok
test global_position_int::tests::round_trip_arbitrary ... ok
test heartbeat::tests::round_trip_falcon_default ... ok
test heartbeat::tests::round_trip_gcs_default ... ok
test heartbeat::tests::round_trip_max_values ... ok
test heartbeat::tests::round_trip_zero ... ok
test heartbeat::tests::round_trip_arbitrary ... ok
test frame::tests::parser_never_panics ... ok

test result: ok. 55 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.42s

running 0 tests

test result: ok. 0 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s

running 17 tests
test engine::proptests::persistence_requires_consecutive ... ok
test engine::proptests::compare_matches_rust ... ok
test engine::tests::geofence_boundary_inclusive ... ok
test engine::tests::geofence_inside_does_not_trip ... ok
test engine::tests::geofence_outside_d_trips ... ok
test engine::tests::geofence_outside_e_trips ... ok
test engine::tests::geofence_outside_n_trips_once ... ok
test engine::tests::test_bounded ... ok
test engine::tests::test_disabled ... ok
test engine::tests::test_empty ... ok
test engine::tests::test_gt_violation ... ok
test engine::tests::test_ops ... ok
test engine::tests::test_persistence ... ok
test engine::tests::test_persistence_reset ... ok
test engine::proptests::disabled_never_fires ... ok
test engine::tests::test_sensor_filter ... ok
test engine::proptests::output_always_bounded ... ok

test result: ok. 17 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.02s

running 0 tests

test result: ok. 0 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s

running 1 test
test tests::deterministic_geofence_catches_spoof_and_triggers_rtl ... ok

test result: ok. 1 passed; 0 failed; 0 ignored; 0 measured; 16 filtered out; finished in 0.02s

[ skip-bench-only] FV-FALCON-GEO-003: MIRIFLAGS=-Zmiri-disable-isolation cargo +nightly miri test -p falcon-hitl-rfspoof --bin falcon-hitl-rfspoof mavlink::tests
[ skip-bench-only] FV-FALCON-COV-003: cargo build -p geofence-subject-rs --target wasm32-unknown-unknown --release
[ skip-bench-only] FV-FALCON-COV-003: cp target/wasm32-unknown-unknown/release/geofence_subject_rs.wasm coverage_subjects/
[ skip-bench-only] FV-FALCON-COV-003: bazel build //:geofence-subject-rs-coverage
[ skip-bench-only] FV-FALCON-COV-003: cat bazel-bin/geofence-subject-rs-coverage_witness-run.json
[ skip-bench-only] FV-FALCON-ARCH-002: cd /Users/r/git/pulseengine/spar && git pull --rebase && cargo install --path crates/spar-cli --locked
[ skip-bench-only] FV-FALCON-ARCH-002: spar codegen --root Falcon_System::Falcon.Quad --format wit --output /tmp/falcon-spar-wit spar/*.aadl
[ skip-bench-only] FV-FALCON-ARCH-002: diff /tmp/falcon-spar-wit/wit/autopilot.wit wit/falcon-cascade/cascade.wit
[ PASS] ( 0.14s) FV-FALCON-MAVLINK-001: cargo test -p relay-mavlink
[ PASS] ( 1.61s) FV-FALCON-MAVLINK-001: cargo test -p relay-mavlink --release
[ PASS] ( 0.53s) FV-FALCON-MAVLINK-001: PROPTEST_CASES=4096 cargo test -p relay-mavlink
[ skip-bench-only] FV-FALCON-SIM-005: cargo test -p falcon-sitl-gz --features gazebo
[ skip-bench-only] FV-FALCON-SIM-005: cargo run -p falcon-sitl-gz --features gazebo -- --backend=gazebo --world=falcon --model=quad --home=47.3977,8.5456,488 --duration=30
[ skip-bench-only] FV-FALCON-GEO-001: bazel test //:relay_lc_verus_test
[ PASS] ( 0.13s) FV-FALCON-GEO-001: cargo test -p relay-lc
[ PASS] ( 0.11s) FV-FALCON-GEO-001: cargo test -p falcon-sitl-hover tests::deterministic_geofence_catches_spoof_and_triggers_rtl

✅ Rivet verification gate — falcon

25/25 passed

count
Passed 25
Failed 0
Skipped (bench-only — needs hardware / sim) 7
Skipped (no steps) 0

Bench-only artifacts (not run by CI)

  • FV-FALCON-COV-001 — witness MC/DC structural coverage — falcon pipeline wired (v0.13)
  • FV-FALCON-SIM-001 — PX4-SITL end-to-end loop — recipe + preset + smoke (v0.14.0)
  • FV-FALCON-ARCH-001 — spar AADL architectural model — falcon cascade (v0.13)
  • FV-FALCON-GEO-003 — Geofence safety path — miri UB/overflow check (v0.12, AI substitute)
  • FV-FALCON-COV-003 — witness MC/DC on real Rust source — Geofence subject (v0.14.1)
  • FV-FALCON-ARCH-002 — spar codegen --format wit recheck — works at v0.10.0 (v0.15.0)
  • FV-FALCON-SIM-005 — gz-transport NavSat + Home projection — position-dependent loops (v0.18.1)

Source of truth: artifacts/verification/FV-FALCON-*.yaml.

avrabe and others added 2 commits May 25, 2026 07:30
PR #39 turned the gate on for real and immediately surfaced 5
infra gaps (cargo-llvm-cov missing, wasm32 target missing,
--features gazebo libzmq C-compile, bazel-output dependent reads).

Two-pronged fix:

1. Provision cargo-llvm-cov + llvm-tools-preview in the gate
   workflow (mirrors what coverage.yml already does). Closes
   FV-FALCON-COV-002 cleanly — the dedicated Coverage workflow
   ran fine; the gate just lacked the same tool installs.

2. Extend BENCH_PATTERNS to skip steps that need infra the gate
   runner doesn't have:
   - --features gazebo → libzmq C-compile via zeromq-src; the
     default-feature cargo test runs fine, only the optional
     gazebo path needs the heavy build.
   - cat bazel-bin/... → reads bazel output that was skipped.
   - target/wasm32-... → cp/cargo build chains depending on a
     wasm32-unknown-unknown step that needs `rustup target add`
     in the gate runner (deferred — cheap to add later).

Local verdict after fix: 26/32 passed, 6 bench-only, 0 failed.

The bench-only set is now what genuinely needs hardware / a real
bench: spar (ARCH-001/002), miri (GEO-003), PX4-SITL (SIM-001),
witness pipeline (COV-001), and the --features gazebo full-stack
tests (SIM-005). Everything else runs end-to-end on the standard
ubuntu-latest gate runner.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
…get/wasm32-` paths

Surfaced by PR #39's re-run: COV-003's `cargo build … --target
wasm32-unknown-unknown` slipped through the previous pattern
(which only matched the `cp target/wasm32-…/release/` chain).
Add a sibling pattern for the cargo --target flag form.

Local verdict: 25/25 passed, 7 bench-only, 0 fail.

Also: fix syntax — the previous commit accidentally left a
trailing `]` outside the list literal, causing
SyntaxError: unmatched ']'.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
@avrabe avrabe merged commit 585ad08 into main May 25, 2026
9 checks passed
@avrabe avrabe deleted the falcon/fix-verification-gate-filter branch May 25, 2026 05:59
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant